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读者

最佳答案

您可以轻松地在脑海中运行该程序:


Xm
X停留在while循环中,等待yY修改
Y想要锁定m,但互斥锁已由X拥有
Y无法更新y
X永远循环

10-08 07:35