2013-06-22 45 views
0

我有下面的代碼,我想知道printf打印:
我做到了,但我不知道我的回答。信號量p3永久封鎖?

變量:d = 0,A = 1,B = 1,C = 0。

p1    p2     p3 
while(1) {  while(1){   while(1){ 
    P(A); P(B);  P(A); P(B);   P(C); P(C); 
    d = 2*d;   d = d+1;   printf("%d\n",d); 
    V(C)    V(C);    V(A); V(B); 
}    }     } 

我的嘗試是:

C=0, p3被阻塞 開始形式過程

p1 A=0, B=0 and d=0 and C=1. 
p2 blocks because A=0 and B=0, p3 

它還塊在第二P(C)A=0, B=0, C=0發生死鎖,並且printf不會打印任何內容。它是否正確?

+0

對於我們這些沒有精神或班上的人,P(X)和V(X)是做什麼的? – Dukeling

+0

@Dukeling,'P'傳統上是'down'/'wait','V'是'up' /'signal'。 – zch

+0

對不起,P(X)下降,V(X)上升 – sdafad

回答

0

你是對的 - 死鎖 - 沒有打印。

處於死鎖狀態:p3正在等待第二個P(C)。 p1或p2完成了第一次迭代,另一次 - 零迭代。 p1和p2都在P(A)處等待。 d的值取決於p1和p2之間的種族 - 進入第一次迭代。