局部变量不能被共享。
不变的集合很容易在多个线程中使用,因为他们不能改变。如果希望使用应在多个线程中改变的集合。
.Net在命名空间System.Collections.Concurrent中提供了几个线程安全的集合类。
线程安全的集合可防止多个线程以相互冲突的方式访问集合。
为了对集合进行线程安全的访问,定义了IProducerConsumerCollection<T>接口
这个接口最重要的方法是TryAdd()和TryTake()。TryAdd()方案尝试给集合添加一项,但如果集合禁止添加项,这个操作就可能失败。为了给出相关信息,TryAdd()方法返回一个布尔值,以说明操作是成功还是失败。
TryTake()也可以以这种方式工作,以通知调用者操作是成功还是失败,并在操作成功时返回集合中的项。
ConcurrentQueue<T>--这个集合类用一种免锁定的算法实现,使用在内部合并到一个链表中的32项数组。访问队列元素的方法有Enqueue()、TryDequeue()、和TryPeek()。和Queue<T>类的方法类似,只是给可能调用失败的方法加上了前缀Try。因为这个类实现了IProducerConsumerCollection<T>接口,所以TryAdd()和TryTake()方法仅调用Enqueue()和TryDequeue()方法。
ConcurrentStack<T>---非常类似于ConcurrentQueue<T>类,只是带有另外的元素访问方法,
ConcurrentStack<T>类定义了Push()、PushRange()、TryPeek()、TryPop()以及TryPopRange()方法。在内部这个类使用其元素的链表。