次の質問が現れたとき、私はバイナリセマフォを研究していました。
3 つの同時プロセスと 3 つのバイナリ セマフォがあるとします。セマフォは S0=1、S1=0、S2=0 として初期化されます。プロセスには次のコードがあります。
Process P0: Process P1: Process P2:
while (true){ wait(S1); wait(S2);
wait (S0); release (S0); release(S0);
print '0';
release (S1);
release (S2);
}
問題は、プロセスが 0 を何回出力するかです。
私がどのようにそれを解決していたかを説明しましょう.. 3 つのプロセスの最初の 3 つのステートメントが同時に実行されるとします! つまり、プロセス p0 の while ステートメント、プロセス p1 の wait(S1) およびプロセス P2 の wait(S2) .. ここで、wait(S1) と wait(S2) の両方がセマフォ値を -1 にし、プロセス P1そして P2 はブロックされます。次に、プロセス P0 の wait(S0) が実行されます。これが発生すると、S0 の値が 0 になり、プロセス P0 がブロック状態になり、その結果、すべてのプロセスがブロックされ、デッドロック状態になります!! しかし、残念ながらそれは答えではありません。. どこが間違っているのか、解決方法を教えてください。:|
編集:
バイナリ セマフォに対する私のアプローチは間違っていました.. 0 と 1 しか取りません!