マルチスレッドのプログラミング

「呼び起こし忘れ」問題

pthread_cond_signal() または pthread_cond_broadcast() を呼び出すとき、スレッドが条件変数に関連する相互排他ロックを保持していないと「呼び起こし忘れ」(lost wake-up) という問題が生じることがあります。

「呼び起こし忘れ」は次のすべての条件が揃った場合に発生します。

この問題は、条件に関連付けられた相互排他ロックを保持しないでテスト対象の条件が変更された場合に限り発生します。関連付けられた mutex を保持した状態でテスト対象の条件を変更した場合には、pthread_cond_signal()pthread_cond_broadcast() を呼び出すときにそれらがその mutex を保持しているかどうかは影響しません。