2

このセマフォチュートリアルからの抽出は次のように述べています:

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

wait と notify だけを使用してシグナルの見逃しを避けることはできませんか?

4

2 に答える 2

3

2 つのスレッドがあり、一方が他方を呼び出すnotify()前に を呼び出すと、シグナルの欠落が発生する可能性がありますwait()。これを回避する唯一の方法は、最初のスレッドが呼び出されるまで 2 番目のスレッドを待機させるある種のバリアを用意するnotify()ことです。このバリアを作成するために使用できるメカニズムの 1 つがセマフォです:)

于 2013-06-10T20:30:29.323 に答える