SpinLock

SpinLock 構造体は低レベルで相互排他的な同期プリミティブであり、ロックの取得を待機する間にスピンします。 マルチコア コンピューターでは、待機時間が短いことが予測され、競合を最小限に抑えられる場合、パフォーマンスは他の種類のロックよりも SpinLock の方が優れています。 ただし、プロファイルにより、System.Threading.Monitor メソッドまたは Interlocked メソッドがプログラムのパフォーマンスを大幅に低下させていることがわかった場合にのみ、SpinLock を使用することをお勧めします。

SpinLock では、ロックをまだ取得していない場合でも、スレッドのタイム スライスが生成される可能性があります。 スレッドの優先順位の逆転を避ける場合と、ガベージ コレクターを進める場合にこのようになります。 SpinLock を使用する場合は、スレッドが一定時間ロックを保持できないことと、スレッドがロックを保持している間はブロックできないことを確認してください。

SpinLock は値の型であるため、2 つのコピーで同じロックを参照する場合は、参照渡しで明示的に渡す必要があります。

この型の使用方法の詳細については、「System.Threading.SpinLock」を参照してください。 例については、「方法: 下位レベルの同期に SpinLock を使用する」を参照してください。

SpinLock ではスレッド-追跡 モードがサポートされ、開発フェーズ中に使用することができ、特定の時間にロックを保持しているスレッドの追跡に役立ちます。 スレッド追跡モードはデバッグに非常に役立ちますが、パフォーマンスが低下する可能性があるため、リリース バージョンのプログラムでは無効にすることをお勧めします。 詳細については、「方法: SpinLock のスレッド追跡モードを有効にする」を参照してください。

関連項目