下面是代碼中,每個線程必須等待每個其他線程完成集合部分,然後等到每個人都完成了關鍵部分。信號量的小書
/* 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