背景
对于并行任务,与其相关紧密的就是对一些共享资源,数据结构的并行访问。经常要做的就是对一些队列进行加锁-解锁,然后执行类似插入,删除等等互斥操作。 .NetFramework 4.0 中提供了一些封装好的支持并行操作数据容器,可以减少并行编程的复杂程度。
需要注意的是:线程安全并不是没有代价的,比起System.Collenctions和System.Collenctions.Generic命名空间中的列表、集合和数组来说,并发集合会有更大的开销。因此,应该只在需要从多个任务中并发访问集合的时候才使用并发几个,在串行代码中使用并发集合是没有意义的,因为它们会增加无谓的开销。
并行容器
1、BlockingCollection
与经典的阻塞队列数据结构类似,能够适用于多个任务添加和删除数据,提供阻塞和限界能力。
2、ConcurrentBag
提供对象的线程安全的无序集合
3、ConcurrentDictionary
提供可有多个线程同时访问的键值对的线程安全集合
4、ConcurrentQueue
提供线程安全的先进先出集合
5、ConcurrentStack
提供线程安全的后进先出集合