新的命名空间System.Collections.Concurrent包含字典、队列和堆栈等类的并发集合。有人知道为什么没有ConcurrentList吗?
更新我发布了一个新问题来解释我目前的情况。我更愿意这样做,而不是改变原来问题的整个意义。这是新问题的链接
如果两个线程同时添加条目,您对"顺序"的期望是什么?如果您想要的只是一个项的集合,那么ConcurrentBag更合适。
对于从另一个线程更改的数据结构,随机访问没有多大意义。
如果你看一下并发集合,你会注意到它们的接口是专门为多线程访问而设计的。我想不出一个有用的类似列表的接口,可以很好地与多线程代码一起工作。
如果元素从未移动,那么随机多线程访问是有意义的,但之后你有一个数组。
早在2011年,我就写了一个ConcurrentList<T>
类(代码可在GitHub上获得),它是线程安全的,无锁的,并实现了一些的IList<T>
接口。
值得注意的是,除了Add
之外,不支持任何改变列表的操作;也就是说,它是一个只能追加的集合。所以Insert
、RemoveAt
等都不起作用