.Net框架中是否有使用spinlock或spinwait的示例?

时间:2011-06-28 11:31:15

标签: .net multithreading spinlock spinwait

我查看了并发集合,但它们似乎在引擎盖下使用了正常锁定。 .Net框架中是否有使用此锁定构造的好例子?


我最初看过ConcurrentDictionary。我看到它使用普通锁,但BlockingCollection类在其内部方法中使用SpinWait。

3 个答案:

答案 0 :(得分:4)

正常锁定是什么意思?某种lock(object) { ... }构造?

如果是,您应该查看ConcurrentStack,例如,它使用SpinWait作为其工作。

答案 1 :(得分:4)

几乎任何低锁并发集合类都可能使用SpinWaitYield的某种组合。虽然ConcurrentDictionary是一个值得注意的例外。我找到的课程列表包括以下内容。

  • ManualResetEventSlim
  • SemaphoreSlim
  • 自旋锁
  • ReaderWriterLockSlim
  • ConcurrentQueue
  • ConcurrentStack
  • BlockingCollection

答案 2 :(得分:2)

ConcurrentStack和ConcurrentQueue是无锁集合,但是ConcurrentDictionary,ConcurrentBag正在使用锁。 BlockingCollections只是一个容器,因此它本身不是一个集合,例如,它必须包装其他线程安全集合 var bc = new BlockingCollection(new ConcurrentStack());

这是一篇关于如何在无锁代码中使用SpinWait的介绍性文章 http://www.emadomara.com/2011/08/spinwait-and-lock-free-code.html