如何使用多个线程管理从集合中添加和删除特定项?

时间:2012-06-05 05:51:37

标签: c# .net multithreading c#-4.0 locking

我有很多线程可以将项目添加到集合中,并在某些条件下从该集合中删除特定项目。在第一个项目中,读者多于作家。在第二个项目中,读者可能不仅仅是作家或同等或更少。

  1. 我应该如何管理添加/删除该集合?
  2. 使用什么系列?添加/删除阻止的简单List
  3. 使用哪种阻止机制(lockReaderWriterLockSlim,...)?

2 个答案:

答案 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