このセマフォチュートリアルからの抽出は次のように述べています:
このようなセマフォを使用すると、シグナルの欠落を避けることができます。notify() の代わりに take() を呼び出し、wait() の代わりに release() を呼び出します。take() の呼び出しが release() の呼び出しの前に発生した場合でも、release() を呼び出しているスレッドは take() が呼び出されたことを認識します。これは、シグナルがシグナル変数に内部的に格納されているためです。これは、wait() と notify() には当てはまりません。
wait と notify だけを使用してシグナルの見逃しを避けることはできませんか?