我查看了并发集合,但它们似乎在引擎盖下使用了正常锁定。 .Net框架中是否有使用此锁定构造的好例子?
我最初看过ConcurrentDictionary。我看到它使用普通锁,但BlockingCollection类在其内部方法中使用SpinWait。
答案 0 :(得分:4)
正常锁定是什么意思?某种lock(object) { ... }
构造?
如果是,您应该查看ConcurrentStack
,例如,它使用SpinWait
作为其工作。
答案 1 :(得分:4)
几乎任何低锁并发集合类都可能使用SpinWait
和Yield
的某种组合。虽然ConcurrentDictionary
是一个值得注意的例外。我找到的课程列表包括以下内容。
答案 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