0

我有以下代码,我想知道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不打印任何内容。这个对吗?

4

1 回答 1

0

你是对的 - 死锁 - 没有打印。

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

于 2013-06-22T12:33:47.850 回答