実装には競合状態があり、シグナルを見逃す可能性があります。問題は pthread_cond_wait 関数がアトミックでないことですか? ファイルhttps://github.com/android/platform_bionic/blob/master/libc/bionic/pthread.cのコメントでも同じことが説明されてい ます
この操作はアトミックであるべきではありませんか?
実装には競合状態があり、シグナルを見逃す可能性があります。問題は pthread_cond_wait 関数がアトミックでないことですか? ファイルhttps://github.com/android/platform_bionic/blob/master/libc/bionic/pthread.cのコメントでも同じことが説明されてい ます
この操作はアトミックであるべきではありませんか?
この「競合状態」について心配する必要はありません。コメントによると、1 つのスレッドが異常な場所でスリープ状態になり、そこで長時間スリープ状態を維持し、他のスレッドが条件変数に異常な回数 (それ以上でもそれ以下でもない) シグナルを送信した場合にのみ発生する可能性があります。
これは、特にfutexに基づく場合、条件変数の多くの完全に合理的な低レベルの実装に実際に固有のものです。基本的に、ユーザー空間コードは整数変数の値をアトミックにチェックした後、カーネルを呼び出してブロッキング操作を実行しますが、その間に整数変数の値が変更された場合は操作を中止するようカーネルに指示します。病理学的なケースは、整数変数がその範囲全体を正確に整数回ラップした場合です (最初の呼び出し元がずっとブロックされたままです!)。
このような非常に微妙な詳細について、これまで以上に知りたい場合は、この論文をお読みください。