我有很多线程可以将项目添加到集合中,并在某些条件下从该集合中删除特定项目。在第一个项目中,读者多于作家。在第二个项目中,读者可能不仅仅是作家或同等或更少。
List
?lock
,ReaderWriterLockSlim
,...)?答案 0 :(得分:0)
您可以使用命名空间System.Collections.Concurrent
中的数据结构。它们封装了您提到的所有三个方面,可以在没有显式锁定的情况下从并发线程中使用。
请参阅:System.Collections.Concurrent Namespace at MSDN
例如ConcurrentBag<T>
具有ICollection
接口,并且是一个线程安全的实现,针对同一线程生成和使用存储在数据包中的数据的情况进行了优化。
如果您需要快速查找对象,也可以使用ConcurrentDictionary<TKey, TValue>
。
答案 1 :(得分:-1)
ConcurrentBag无法删除特定项目,因为它是无序的对象集合的错误。
但是BlockingCollection可以使用TryTake方法完成此操作。只需将要删除的项目作为参数传递即可。请参阅:http://msdn.microsoft.com/en-us/library/dd287184(v=vs.110).aspx