我有以下代码,我想知道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
没有打印任何内容。这是对的吗?
答案 0 :(得分:0)
你是对的 - 僵局 - 没有印刷。
死锁:p3在第二个P(C)等待。 p1或p2完成了第一次迭代,另一次是零迭代。 p1和p2都在P(A)等待。 d的值取决于p1和p2之间的竞争 - 进入第一次迭代。