クラスの概念的な疑似コード セマフォの割り当てに取り組んでいます。
一部のプロセスがセマフォで wait() を呼び出す前に、セマフォで signal() を呼び出すことができるかどうかを知りたいです。例えば:
Shared data:
Semaphore x = 0;
Process 1:
wait(x);
print("I'm Process 1, and Process 2 has already printed!");
terminate();
Process 2:
print("I'm Process 2!");
signal(x);
terminate();
上記の仮定では、どのプロセスが最初に実行されるかは保証されていませんが、print ステートメントを正しい順序で実行する必要があります (プロセス 1 の前にプロセス 2)。プロセス 1 が開始されると、x で待機します。次に、プロセス 2 がその印刷を実行し、x にシグナルを送って、プロセス 1 が印刷できるようにします。
ただし、プロセス 2 が開始すると、プロセス 1 が待機する前に x に通知されます。望ましい結果は、x がプロセス 1 に対して「事前に通知」され、wait(x) ステートメントをスキップすることです。これは実際に起こることですか?それとも、誰も待機していないセマフォにシグナルを送ることができないため、何らかのエラーが発生しますか?