【发布时间】:2011-05-12 07:17:56
【问题描述】:
所以,我试图在 C 中实现一个并发队列。我将方法分为“读取方法”和“写入方法”。因此,当访问写入方法时,例如 push() 和 pop(),我获得了一个写入器锁。读取方法也是如此。此外,我们可以有多个读者,但只有一个作者。
为了让它在代码中工作,我为整个队列设置了一个互斥锁。还有两个条件锁——一个给作者,另一个给读者。我还有两个整数来跟踪当前使用队列的读取器和写入器的数量。
所以我的主要问题是 - 如何实现多个读取器同时访问读取方法?
目前这是我的一般读取方法代码:(在伪代码中 - 不是 C。我实际上使用的是 pthreads)。
mutex.lock();
while (nwriter > 0) {
wait(&reader);
mutex.unlock();
}
nreader++;
//Critical code
nreader--;
if (nreader == 0) {
signal(&writer)
}
mutex.unlock
所以,假设我们有一个持有互斥锁的阅读器。现在任何其他出现并试图获得互斥锁的读者都无法获得。不会堵吗?那么有多少个reader同时访问read方法呢?
我的推理正确吗?如果是,如何解决?
【问题讨论】:
-
您需要在混合中添加一个信号量。并查看google.co.uk/…
-
我相信只使用条件变量是可能的。但是如果我必须使用信号量,你会说我应该用它做什么?
-
链接是一篇描述使用互斥体和信号量的算法的经典文章。
-
哦,谢谢!我没有注意到链接。
标签: c concurrency