以下は、各スレッドが他のスレッドがランデブー部分を完了するまで待機し、全員がクリティカル セクションを完了するまで待機する必要があるコードです。
/* rendezvous code */
mutex.wait()
count++;
mutex_signal()
if(count==n)
sem.signal()
sem.wait()
sem.signal()
mutex.wait()
count--;
mutex.signal()
if(count==0)
sem.wait()
2 つのプロセスが同じカウント値 (0 または n の可能性がある) を参照するケースに到達する可能性があることを私は知っています。このため、2 つ以上の信号が同時に送信される場合があります。最後のテストでデッドロックが発生する可能性があります。私はこれを理解していないようです。
これは回転式のセマフォ配置であり、作者は実際には回転式改札口であると考えていますが、これはセマフォであり、デッドロックなしで動作するはずです。このコードにデッドロックがある理由を教えてください!