C 读写器:这段代码怎么会导致死锁

C 读写器:这段代码怎么会导致死锁,c,C,在上面的代码中,m是互斥锁,farpar是条件变量。 我被告知这可能会造成死锁,但我不知道这是怎么发生的。顺便说一句,X是编写器,Yreader您可以轻松地在心里运行程序: X锁定m X停留在while循环中,等待y修改y Y想要锁定m但互斥锁已由X Y无法更新Y X永远循环 很抱歉,X是写入者,y是读取者这不是一个死锁,你被困在while中,条件总是正确的…为什么我看不到任何farpars。。。 void X() { lock(&m); while(x || y) wai

在上面的代码中,
m
是互斥锁,
farpar
是条件变量。
我被告知这可能会造成死锁,但我不知道这是怎么发生的。顺便说一句,
X
是编写器,
Y
reader

您可以轻松地在心里运行程序:

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

很抱歉,X是写入者,y是读取者这不是一个死锁,你被困在while中,条件总是正确的…为什么我看不到任何
farpar
s。。。
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);
}