Linux で最も低いロック プリミティブは何ですか。と について知っていfutex_wait
ますfutex_wake
。ただし、futex はロック以外のシグナリングにも使用できます。最も低いロック プリミティブは何ですか? glibc ライブラリのどこにありますか? 第二に、条件変数もfutexに基づいていますか?
質問する
345 次
2 に答える
0
「最低」というものはありませんが、さまざまなシナリオと目的のロックであり、「シグナリング」はさまざまな種類のロックを区別するための正しい基準ではありません。
- アトミック操作に基づく、アクティブな待機を実行するロック プリミティブ、スピンロックがあります。C11 の会場では、これらはもはや OS の機能ではなく、
atomic_flag
そのために使用できます。 - ロック プリミティブの他のファミリは、待機中に呼び出し元のスレッドを一時停止します。Linuxでは、これらはすべてアトミック操作の組み合わせで実装さ
futex
れ、待機部分の下の作業馬として実装されます。
スピンロックは、クリティカル フェーズが少数のアセンブラー命令のみであることがわかっており、スケジューラーまたはシグナルによってクリティカル フェーズが中断される可能性が低いコンテキストで使用するのが最適です。これは、多くの人が信じがちなよりもはるかに多くのコンテキストに当てはまります。したがって、これatomic_flag
は C 言語の重要な新機能です。
他のロックは、アクティブな待機がシステム リソースのかなりの部分を消費するコンテキストで最適に使用されます。
于 2012-05-01T20:28:17.133 に答える