这是第一个读写器问题的代码:

    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阅读完内容后,应该唤醒作者进行写作。所以基本上,当所有的读者都读完之后,它会发出什么信号来表示写作可以重新开始。
批评性部分可以有多个读者,但只有一个作者所以当作者发现在关键部分有读者时,它就进入睡眠状态,并假设当所有读者都读完了,他们就会把它叫醒,现在把它从睡眠信号中叫醒给了作者。

10-06 04:13