0

这是阅读器进程的代码(可行的代码)

reader(){
while(true){
P(mutex);
readerCounter++;
     if((readerCount == 1)
     P(OKtoaccessDB);
V(mutex);
accessDB;
readerCounter--;
if(readerCounter == 0)
     V(OKtoaccessDB);
V(mutex);
}
}

这是作家的过程;

writer(){
while(true){
    P(OKtoacessDB);
    accessDB;
    V(OKtoacessDB);
   }
}

如果替换(在读者中)会有什么结果

从:

if(readerCounter == 0)
     V(OKtoacessDB);
     V(mutex);

至 :

if(readerCounter == 0){
     V(OKtoaccessDB);
     V(mutex);
}

谢谢!

4

1 回答 1

0

V(互斥体);互斥锁被锁定以独占访问 readerCounter。如果您像这样更改代码:

if(readerCounter == 0){
     V(OKtoaccessDB);
     V(mutex);
}

只有当 readerCounter 为零时,您才会释放互斥锁。在所有其他情况下,阅读器将退出而不解锁互斥锁。这实质上意味着当 readerCounter 不为零时退出读取调用的第一个读取器将在不解锁互斥锁的情况下消失。这将阻止所有后续读者继续前进。

于 2019-12-16T06:44:22.693 回答