Thread.SpinWait(Int32) 方法

定义

使线程等待参数定义的 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 中的类(如 MonitorReaderWriterLock)在内部使用此方法。 SpinWait 实质上,处理器进入非常紧密的循环,并使用参数指定的 iterations 循环计数。 因此,等待的持续时间取决于处理器的速度。

将此与 Sleep 方法形成鲜明对比。 调用 Sleep 的线程将生成其当前处理器时间切片的其余部分,即使指定的间隔为零。 指定一个非零间隔,以 Sleep 从线程计划程序考虑线程,直到时间间隔已过。

SpinWait 通常不适用于普通应用程序。 在大多数情况下,应使用 .NET Framework 提供的同步类;例如,调用 Monitor.Enter 或将 Monitor.Enterlock 包装在 C# 或 Visual Basic 中的 SyncLock) 的语句。

Caution

在极少数情况下,避免上下文切换是有利的,例如,当知道状态更改即将发生时,请在循环中调用 SpinWait 该方法。 代码 SpinWait 执行旨在防止在具有多个处理器的计算机上出现的问题。 例如,在具有多个 Intel 处理器的计算机上,采用 Hyper-Threading 技术, SpinWait 在某些情况下防止处理器饥饿。

适用于