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 框架中的類別,如 Monitor 和 ReaderWriterLock,內部使用此方法。
SpinWait 本質上會讓處理器陷入一個非常緊密的迴圈,迴圈數量由 iterations 參數決定。 因此,等待的時間長短取決於處理器的速度。
與此 Sleep 形成對比。 呼叫 Sleep 執行緒會產出其目前處理器時間的剩餘切片,即使指定的區間為零。 指定非 Sleep 零區間會使該執行緒在時間區間結束前,從排程器中移除該執行緒的考量範圍。
SpinWait 一般應用中並不實用。 在大多數情況下,你應該使用 .NET Framework 提供的同步類別;例如,呼叫 Monitor.Enter 或一個封裝 Monitor.Enter(C# 中 lock,Visual Basic 中 SyncLock)。
注意事項
在極少數需要避免上下文切換有利的情況下,例如你知道狀態即將改變,請呼叫迴圈中的該 SpinWait 方法。 執行的程式碼 SpinWait 設計用來防止在多處理器電腦上可能發生的問題。 例如,在搭載多個 Intel 處理器且採用 Hyper-Threading 技術的電腦上, SpinWait 在某些情況下可防止處理器缺氧。