3

Linux で最も低いロック プリミティブは何ですか。と について知っていfutex_waitますfutex_wake。ただし、futex はロック以外のシグナリングにも使用できます。最も低いロック プリミティブは何ですか? glibc ライブラリのどこにありますか? 第二に、条件変数もfutexに基づいていますか?

4

2 に答える 2

1

futex(2)futex(7)の man ページなど、 futex -esに関するさまざまなドキュメントを読んでください。pthread ロック プリミティブが futex とアセンブリ コードの混合で実装されていることを学習します (移植可能な C99 では表現できないことを行います)。

(コメントで言ったように)

于 2012-05-01T19:52:22.510 に答える
0

「最低」というものはありませんが、さまざまなシナリオと目的のロックであり、「シグナリング」はさまざまな種類のロックを区別するための正しい基準ではありません。

  • アトミック操作に基づく、アクティブな待機を実行するロック プリミティブ、スピンロックがあります。C11 の会場では、これらはもはや OS の機能ではなく、atomic_flagそのために使用できます。
  • ロック プリミティブの他のファミリは、待機中に呼び出し元のスレッドを一時停止します。Linuxでは、これらはすべてアトミック操作の組み合わせで実装さfutexれ、待機部分の下の作業馬として実装されます。

スピンロックは、クリティカル フェーズが少数のアセンブラー命令のみであることがわかっており、スケジューラーまたはシグナルによってクリティカル フェーズが中断される可能性が低いコンテキストで使用するのが最適です。これは、多くの人が信じがちなよりもはるかに多くのコンテキストに当てはまります。したがって、これatomic_flagは C 言語の重要な新機能です。

他のロックは、アクティブな待機がシステム リソースのかなりの部分を消費するコンテキストで最適に使用されます。

于 2012-05-01T20:28:17.133 に答える