信号量p3永远被封锁?

时间:2013-06-22 12:04:40

标签: semaphore

我有以下代码,我想知道printf打印的内容:
 我做到了,但我不确定我的答案。

变量: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没有打印任何内容。这是对的吗?

1 个答案:

答案 0 :(得分:0)

你是对的 - 僵局 - 没有印刷。

死锁:p3在第二个P(C)等待。 p1或p2完成了第一次迭代,另一次是零迭代。 p1和p2都在P(A)等待。 d的值取决于p1和p2之间的竞争 - 进入第一次迭代。