为什么没有ConcurrentList <t> </t>

时间:2011-10-25 20:07:59

标签: .net thread-safety task-parallel-library concurrent-collections

新命名空间System.Collections.Concurrent包含字典,队列和堆栈以及其他类的并发集合。任何人都知道为什么没有ConcurrentList?

更新

我发布了一个新问题,解释了我目前的情况。我更倾向于改变原始问题的整体意义。这是新问题的the link

3 个答案:

答案 0 :(得分:5)

对于从另一个线程更改的数据结构,随机访问没有多大意义。

如果你看一下并发集合,你会发现它们的界面是专为很多线程访问而设计的。我想不出一个有用的类似列表的界面,它适用于多线程代码。

如果从不移动元素,那么随机多线程访问就有意义,但是你有一个数组。

答案 1 :(得分:4)

如果两个线程同时添加了项目,那么您对“订单”的期望是什么?如果您想要的只是一组项目,ConcurrentBag更合适。

答案 2 :(得分:0)

返回2011年I wrote a ConcurrentList<T> class(可用代码on GitHub),它是线程安全的,无锁定的,并实现了IList<T>接口的部分

值得注意的是,不支持任何突变列表而不是Add的操作;即,它是一个仅附加的集合。因此InsertRemoveAt等不起作用。