下面是代码,其中每个线程必须等待其他线程完成集合部分,然后等到每个人都完成关键部分。
/* 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()
我知道两个进程可以达到相同的计数值(0 或 n 可能)的情况。因此,可以同时发送两个或多个信号。上次测试怎么会出现死锁。我似乎不明白这一点。
这是一种旋转门信号量安排,作者实际上认为它是一个旋转门,但它是一个信号量,它应该在没有死锁的情况下工作。请告诉我这段代码怎么会出现死锁!