Thread.SpinWait(Int32) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
导致线程等待由 iterations
参数定义的时间量。
public:
static void SpinWait(int iterations);
public static void SpinWait (int iterations);
static member SpinWait : int -> unit
Public Shared Sub SpinWait (iterations As Integer)
参数
- iterations
- Int32
定义线程等待的时间长短的 32 位有符号整数。
注解
方法 SpinWait 可用于实现锁。 .NET Framework中的类(如 Monitor 和 ReaderWriterLock)在内部使用此方法。
SpinWait 实质上,使用 参数指定的循环计数将处理器置于非常紧密的循环中 iterations
。 因此,等待的持续时间取决于处理器的速度。
将此与 Sleep 方法对比。 调用 Sleep 的线程会生成其当前处理器时间切片的剩余部分,即使指定的间隔为零也是如此。 为 Sleep 指定非零间隔会删除线程计划程序考虑的线程,直到时间间隔已过。
SpinWait 通常对普通应用程序不有用。 在大多数情况下,应使用.NET Framework提供的同步类;例如,调用 Monitor.Enter 或 语句,以 C# SyncLock
或 Visual Basic) 包装Monitor.Enter (lock
。
注意
在极少数情况下,最好避免上下文切换,例如,当知道即将发生状态更改时,请在循环中调用 SpinWait 方法。 执行代码 SpinWait 旨在防止在具有多个处理器的计算机上可能出现的问题。 例如,在具有采用Hyper-Threading技术的多个 Intel 处理器的计算机上, SpinWait 在某些情况下可防止处理器不足。