わかりました、あなたの 3 つの引用符は互換性がありません。しかし、実装に少し踏み込みましょう。
すべての待機可能なオブジェクトには、そのオブジェクトを待機するために使用されるシグナル状態と呼ばれるブール値が関連付けられています。オブジェクトがシグナル状態の場合、待機関数はそれを待機しません。オブジェクトが非シグナル状態の場合、待機関数はそれを待ちます。
では、これは特定のタイプのオブジェクトにどのように適用されるのでしょうか? それはオブジェクトの性質、特にそれを待つことに関連するセマンティクスに依存します。実際には、シグナル状態は待機条件によって定義されます。例(詳細についてはドキュメントを参照):
- ミューテックスは、所有されていないときに通知されます。
- プロセス/スレッドは、終了時に通知されます。
- セマフォは、そのカウントが 0 より大きい場合に通知されます。
- 待機可能なタイマーは、期限切れになると通知されます。
所有されているときにミューテックスが通知された方がいいかもしれませんが、実際には所有されていないときに通知されます。これは、待機関数が正しいことを行うために必要です。
そして、イベントはどうですか?まあ、それらはいくぶん単純なオブジェクトであり、自由にシグナルを送信したり、シグナルを解除したりできるため、シグナル状態には追加の意味はありません。
- signalled: スレッドはそれを待ちません。
- non-signalled: スレッドはそれを待ちます。
イベントにもこれSignalPulse
とAutoReset
少し独特なものがあります(そしてIMEを正しく使用することは事実上不可能です)。
それでは、あなたの引用を見てみましょう:
シグナル状態は、プロセスまたはスレッドがリソースを使用できることを示します。非シグナル状態は、リソースが使用中であることを示します。
実際、それは解釈です。通常、調停しようとしているリソースがあり、通常、そのリソースが使用されている場合にのみ待機するため、使用中のリソースとリソースの待機が同等になります。しかし、それは技術的な要件ではなく、通常のユース ケースです。
シグナル状態にあるオブジェクトは、そのオブジェクトを待機しているスレッドをブロックすることはなく、シグナル状態にないオブジェクトは、オブジェクトが再びシグナル状態になるまで、そのオブジェクトを待機しているスレッドをブロックさせます。
正しくて要点!
イベントがシグナル状態にあるということは、このイベントがシグナルされるのを待っているスレッドを解放する能力があることを意味します。イベントが非シグナル状態にあるということは、この特定のイベントを待っているスレッドを解放しないことを意味します。
この言い回しは少しややこしいと思います...しかし、前のものに何も追加しません。