multithreading - 关于作者如何在读者/作者算法中被签名

标签 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) 的使用。你能解释一下吗?

最佳答案

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

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

Multiple Readers but Single Writer 可以出现在临界区。因此,当 writer 发现关键部分中有任何读者时,它会进入休眠状态,并假设当所有读者都完成阅读后,他们会唤醒它,现在将它从 sleep 信号中唤醒给 writer。

关于multithreading - 关于作者如何在读者/作者算法中被签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19467209/

相关文章:

java - 如果您在 Thread 构造函数中传递无参数并且不扩展 Thread 类怎么办?

java - 如何终止由于Socket.accept()而被阻塞太长时间的线程?

Spring框架MVC "concurrency"?

algorithm - MapReduce 是否适合解决单机多核内存环境中的问题?

java - 如何限制 LinkedTransferQueue 的大小?

ios - NSURLConnection 在另一个线程中启动。未调用委托(delegate)方法

c - pthread_rwlock_rdlock() 和 pthread_rwlock_wrlock()

iOS-选择整数数组中第二小的数字

algorithm - 计算模逆

algorithm - 为什么 Rabin Karp 算法需要 2 个散列函数来处理模式字符串? (以及子字符串)