在.Net framework中是否有使用spinlock或spinwait的示例?

在.Net framework中是否有使用spinlock或spinwait的示例?,.net,multithreading,spinlock,spinwait,.net,Multithreading,Spinlock,Spinwait,我看了一下并发的集合,但它们似乎在引擎盖下使用了正常的锁定。在.Net framework中有没有使用这种锁定结构的好例子 我最初看的是ConcurrentDictionary。我看到它使用普通锁,但是BlockingCollection类在其内部方法中使用SpinWait。你说的普通锁是什么意思?某种锁(对象){…}构造 如果是,您应该查看ConcurrentStack,例如,它使用SpinWait作为其作业。几乎所有低锁并发收集类都可能使用SpinWait和Yield的组合。然而,conc

我看了一下并发的集合,但它们似乎在引擎盖下使用了正常的锁定。在.Net framework中有没有使用这种锁定结构的好例子


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

你说的普通锁是什么意思?某种
锁(对象){…}
构造


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

几乎所有低锁并发收集类都可能使用
SpinWait
Yield
的组合。然而,
concurrentdirectionary
是一个显著的例外。我找到的类列表包括以下内容

  • 手动重置事件苗条
  • 信号量lim
  • 自旋锁
  • 屏障
  • ReaderWriterLockSlim
  • 并发队列
  • 并发堆栈
  • 封锁收集

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

这是一篇介绍如何在无锁代码中使用SpinWait的文章

你为什么要这样做?自旋锁是一种繁忙的等待机制,即使用资源而不做任何有用的事情。我想我永远都不需要这样做。但我只是想了解更多,看看一个不错的例子。大多数例子充其量都是虚构的。在我看来,你似乎找不到现实生活中的例子已经说明了很多。@Daniel:没错:)。但他们把它包括在内是有原因的。我只是想了解更多。