这是第一个读者/作者问题的代码:
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
完成阅读内容时,它应该唤醒作者进行写作。所以基本上是什么信号表明当所有读者都已完成阅读时写入可以再次返回。
Multiple Readers but Single Writer 可以出现在临界区。因此,当 writer 发现关键部分中有任何读者时,它会进入休眠状态,并假设当所有读者都完成阅读后,他们会唤醒它,现在将它从 sleep 信号中唤醒给 writer。
关于multithreading - 关于作者如何在读者/作者算法中被签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19467209/