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を呼び出すスレッドは、指定された間隔が 0 であっても、プロセッサ時間の現在のスライスの残りの部分を生成します。 Sleepに 0 以外の間隔を指定すると、期間が経過するまでスレッド スケジューラによるスレッドの考慮事項が削除されます。
SpinWait は通常のアプリケーションでは一般的には役に立ちません。 ほとんどの場合、.NET Framework によって提供される同期クラスを使用する必要があります。たとえば、Monitor.Enter を呼び出すか、Monitor.Enter (C# では lock、Visual Basic では SyncLock) をラップするステートメントを呼び出す必要があります。
Caution
状態の変化が差し迫っていることを知っている場合など、コンテキストの切り替えを避けるのが有利なまれなケースでは、ループ内の SpinWait メソッドを呼び出します。 SpinWait実行されるコードは、複数のプロセッサを搭載したコンピューターで発生する可能性のある問題を防ぐために設計されています。 たとえば、Hyper-Threading テクノロジを採用する複数の Intel プロセッサを搭載したコンピューターでは、特定の状況でプロセッサの不足を防 SpinWait 。