.NET是否具有线程安全的泛型类?

时间:2009-07-27 23:42:33

标签: .net multithreading

我已经实现了自己的RingBuffer,但我很惊讶地发现.NET没有。甚至是一个简单的线程安全队列,列表或集合?

为什么.NET不包含线程安全类?他们是否计划未来?

3 个答案:

答案 0 :(得分:3)

通用集合类的线程安全具有可疑的价值 - 通常情况下,您并不需要对它们进行单独操作(例如Add或索引器)是线程安全的,但是而是需要一组操作是线程安全的。例如,如果一个线程将新项目插入到集合中,而另一个线程通过索引器访问循环中的项目,那么集合上的这两个方法是否会锁定它并不重要 - 代码仍然被破坏。也就是说,System.Collections中的一些旧的非泛型集合类(如Hashtable)是线程安全的。

现在线程安全的QueueStack类实际上很有用(它们的协议的限制使它们适用于一般的并发访问),所以它们的遗漏实际上不是设计的,而是更多的监督(或者更有可能是受限制的资源)。但是,您将在.NET 4.0中看到ConcurrentQueueConcurrentStack

答案 1 :(得分:1)

它们将出现在.NET 4.0中,我相信System.Threading.Collections命名空间(或者它是我们在上一次看到的CTP中所使用的命名空间)。

答案 2 :(得分:0)

.NET 4.0 Framework在System.Collections.Concurrent命名空间中引入了几个线程安全的集合:

ConcurrentBag       表示线程安全,无序的对象集合。

ConcurrentDictionary     表示可以由多个线程同时访问的键值对的线程安全集合。

ConcurrentQueue     表示线程安全的先进先出(FIFO)集合。

ConcurrentStack     表示线程安全的后进先出(LIFO)集合。

相关问题