读者 - 作者:这段代码怎么会导致死锁

时间:2015-03-16 14:14:13

标签: c

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

1 个答案:

答案 0 :(得分:3)

您可以轻松地在心理上运行该程序:

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