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 或将 Monitor.Enter (lock 包装在 C# 或 Visual Basic 中的 SyncLock) 的语句。
Caution
在极少数情况下,避免上下文切换是有利的,例如,当知道状态更改即将发生时,请在循环中调用 SpinWait 该方法。 代码 SpinWait 执行旨在防止在具有多个处理器的计算机上出现的问题。 例如,在具有多个 Intel 处理器的计算机上,采用 Hyper-Threading 技术, SpinWait 在某些情况下防止处理器饥饿。