void X() {
lock(&m);
while(x || y)
wait( &farpar, &m);
x ++;
unlock(&m);
// Do X stuff
lock(&m);
x --;
broadcast(&farpar);
unlock(&m);
}
double Y() {
lock(&m);
while(x)
wait( &farpar, &m);
y ++;
unlock(&m);
// Do Y stuff
lock(&m);
y --;
broadcast(&farpar);
unlock(&m);
}
在上面的代码中,m
是互斥锁,farpar
是条件变量。
我被告知这可能会造成僵局,但我不知道怎么会发生这种情况。顺便说一下,X
是作家,Y
读者
答案 0 :(得分:3)
您可以轻松地在心理上运行该程序:
X
锁m
X
停留在while循环中,等待y
Y
Y
想要锁定m
,但互斥锁已归X
所有Y
无法更新y
X
永远循环