SpinWait是更轻量级的同步类型,如果等待时间较短,使用该类型可以避免上下文切换和内核切换带来的高开销。
它可以用来替换你需要使用Sleep,WaitHandle的任何地方,但并不一定总是最优的。通常我们用在无锁数据结构中。
如果是等待1000毫秒,那么还是用Sleep(1000);是吗?如果用SpinWait(1000)就比较浪费了?
@hexllo: 对。重要的是,你得先判断你为啥要等待1000毫秒,是否可以通过 Timer 来实现你的逻辑。
http://q.cnblogs.com/q/2211/
目前的最佳答案大体上是说明白了,但是补充回复有点问题,根据MSDN上的文档
此 SpinWait 方法对于实现锁定很有用。 .NET Framework 中的类(如 Monitor 和 ReaderWriterLock )在内部使用此方法。 SpinWait 实质上,使用参数指定的循环计数,将处理器置于极紧的循环中 iterations 。 因此,等待时间取决于处理器的速度。
其要求的参数不是指等待多少毫秒, 而是指内部循环多少圈,比如Thread.SpinWait(1000)
对于现代计算机而言将很快结束, 而不是在1000毫秒后结束。
推测内部实际使用的是System.Threading.SpinWait结构体内的SpinOnce()
方法。