关于如何在读者/写作者算法中登录作者

时间:2013-10-19 14:38:29

标签: multithreading algorithm concurrency critical-section

这是第一个读者/作者问题的代码:

    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)。你能解释一下吗?

1 个答案:

答案 0 :(得分:1)

if (readcount == 0)
    signal(wrt);

这里发生的是算法检查当所有读者都使用readCount == 0读完内容时,它应该唤醒作者写作。所以基本上是什么信号表明,当所有读者都读完后,写作可以再次进行。

多个读者但单个作家 可以出现在关键部分。因此,当作者发现关键部分中有任何读者时,它会进入睡眠状态,并假设当所有读者都完成阅读时,他们会将其唤醒,现在将其从睡眠状态唤醒,并将其发送给作者。