プロセスの同期を行っていますが、セマフォを理解するのが困難です。だからここに私の疑問があります:
ソースはそれを言います
「セマフォSは、標準のアトミック操作、つまりwait()およびsignal()を介してアクセスされる整数変数です。
また、wait()の基本的な定義も提供しました
wait(Semaphore S)
{
while S<=0
; //no operation
S--;
}
signal()の定義
signal(S)
{
S++;
}
セマフォの初期値を1とし、クリティカルセクションの操作を同時に実行することを想定していない2つの並行プロセスP0とP1があるとします。
ここで、P0がクリティカルセクションにあるため、セマフォSの値は0である必要があります。次に、P1がクリティカルセクションに入り、wait()を実行し、wait()で継続的にループし、ループを終了するとします。セマフォ値はインクリメントする必要がありますが、ソースによると、wait()は不可分操作であり、中断できないため、プロセスP0はシングルプロセッサシステムでsignal()を呼び出すことができないため不可能な場合があります。
知りたいのですが、これまでの理解が正しいかどうかです。そして、正しければ、プロセスP1がwhileループでヒットしたときに、プロセスP0がsignal()を呼び出すのはなぜですか?