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
停留在while循环中,等待X
修改y
y
想要锁定Y
但互斥锁已由m
X
无法更新Y
Y
永远循环X
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);
}