什么更好以及为什么使用List作为线程安全:BlockingCollection或ReaderWriterLockSlim或锁定?

the*_*ist 2 .net c# multithreading locking blockingcollection

我有System.Collections.Generic.List _myList很多线程可以从中读取或同时添加项目.根据我的阅读,我应该使用'BlockingCollection',这样就行了.我也读到ReaderWriterLockSlimlock,但我不知道如何使用它们替代的BlockingCollection,所以我的问题是,我可以做同样的:

  1. ReaderWriterLockSlim

而不是使用'BlockingCollection'.如果是,可以请你提供简单的例子,用的什么利弊BlockingCollection,ReaderWriterLockSlim,lock

更新的 读者将远远超过作家!

Den*_*nis 5

ReaderWriterLockSlim:

  • 针对用例进行优化,当来自资源的读取比写入更频繁地发生时;
  • 可以使用任何类型的资源(不仅仅是集合),因为它只是一个混合同步构造.

lock:

  • 是一个通用的,相当简单的混合同步结构,没有任何优化; 因此,会使性能变差;
  • 是一个围绕Monitor类的C#包装器;
  • 可以使用任何类型的资源;

BlockingCollection:

  • 是一种特定类型的集合(具体的资源类型),旨在解决"生产者 - 消费者"的任务;
  • 支持超时和取消机制(通过取消令牌),这使得更容易集成到使用TPL的代码中.

我想,你的选择是BlockingCollection(如果你真的有很多读者和作家).