这是第一个读写器问题的代码:
semaphore wrt=1, mutex=1;
readcount=0;
writer()
{
wait(wrt);
// Writing is done
signal(wrt);
}
reader()
{
wait(mutex);
readcount++;
if (readcount == 1)
wait(wrt);
signal(mutex);
// Do the Reading
// (Critical Section Area)
wait(mutex);
readcount--;
if (readcount == 0)
signal(wrt);
signal(mutex);
}
我不明白的是在reader()函数中使用了
wait(wrt)
和signal(wrt)
。你能解释一下吗? 最佳答案
if (readcount == 0)
signal(wrt);
这里所发生的是,算法检查当所有的读者都使用
readCount == 0
阅读完内容后,应该唤醒作者进行写作。所以基本上,当所有的读者都读完之后,它会发出什么信号来表示写作可以重新开始。批评性部分可以有多个读者,但只有一个作者所以当作者发现在关键部分有读者时,它就进入睡眠状态,并假设当所有读者都读完了,他们就会把它叫醒,现在把它从睡眠信号中叫醒给了作者。