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
读者 最佳答案
您可以轻松地在脑海中运行该程序:X
锁m
X
停留在while循环中,等待y
被Y
修改Y
想要锁定m
,但互斥锁已由X
拥有Y
无法更新y
X
永远循环