这是第一个读者/作者问题的代码:
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)
。你能解释一下吗?
答案 0 :(得分:1)
if (readcount == 0)
signal(wrt);
这里发生的是算法检查当所有读者都使用readCount == 0
读完内容时,它应该唤醒作者写作。所以基本上是什么信号表明,当所有读者都读完后,写作可以再次进行。
多个读者但单个作家 可以出现在关键部分。因此,当作者发现关键部分中有任何读者时,它会进入睡眠状态,并假设当所有读者都完成阅读时,他们会将其唤醒,现在将其从睡眠状态唤醒,并将其发送给作者。