下面是代码中,每个线程必须等待每个其他线程完成集合部分,然后等到每个人都完成了关键部分。信号量的小书
/* 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可能)。由于这两个或多个信号可能同时发送。在最后一次测试中怎么会有僵局?我似乎没有得到这个。
这是一种轻微的信号量安排,作者实际上认为它是一个旋转门,但它是一个信号量,它应该没有死锁。 请告诉我这段代码是如何发生死锁的!
但是,即使一个线程到达点数== 0,它也将等待.Hence所有的进程将在这点上等待反正。两个线程到达或一个,这些线程将无法通过。 – aasthetic 2011-02-20 01:25:42