私はstraceでプロセスをトレースしており、次のようなエントリを見てきました。
futex(0x7ffff79b3e00, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7ffff79b3e00, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
ただし、 futexのマニュアルページ を見ると、FUTEX_WAIT
やFUTEX_WAKE
などのエントリしか表示されていません。だから私の質問は、私のstrace出力でこれらの名前の最後に追加される_PRIVATE
はどういう意味ですか?たとえば、futexのマニュアルページに記載されているFUTEX_WAKE
と、straceの出力に表示されるFUTEX_WAKE_PRIVATE
の間に違いはありますか、または理解しようとしているときに同じであると想定できますか私がデバッグしているプログラムで何が起こっているか。
これは、プロセス間で共有されていないfutexを高速化するためにlinux/glibcによって行われた最適化です。 Glibcは、ミューテックスで_PRIVATE
属性が設定されていない限り、各futex呼び出しのPTHREAD_PROCESS_SHARED
バージョンを使用します
詳細はこちら: http://lwn.net/Articles/229668/
デバッグの目的で、_PRIVATE
サフィックスを無視することができます