0

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

    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)and的使用。signal(wrt)你能解释一下吗?

4

1 回答 1

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

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

临界区中可以存在多个阅读器但单个编写器。因此,当作者发现临界区中有任何阅读器时,它会进入睡眠状态,并假设当所有阅读器完成阅读后,他们会唤醒它,现在将其从睡眠中唤醒的信号提供给作者。

于 2013-10-19T17:03:07.817 回答