mei*_*rsd 5 c++ multithreading boost
我们已经实现了读写锁
typedef boost::unique_lock<boost::shared_mutex> WriterLock;
typedef boost::shared_lock<boost::shared_mutex> ReadersLock;
Run Code Online (Sandbox Code Playgroud)
我们有许多多线程读取器,但只有少数写入器。读者与其他读者共享访问权限,但阻止作者。Writer 会阻塞,直到它拥有对资源的独占访问权。
我们在 boost 文档中找不到这个...防止 Writer 饥饿的策略是什么?
例如,如果有许多读者都从线程池中获取锁,那么在写入者最终获取锁之前,是否有保证尝试锁的次数上限?
我们看到的性能数据似乎表明写入必须等到完全没有读取器为止,并且在极少数情况下会等待很长时间,因为新读取器可以在当前读取器得到服务时请求锁定。在这种情况下,在我们的代码中,编写者似乎必须等待很长时间,直到根本没有读取。
我们更喜欢一个更像队列的系统,当写入者请求锁定时,所有当前的读取者都会耗尽,但所有新传入的读取者都会阻塞在写入者请求之后。
Boost 中可升级锁概念的行为是什么? 提升线程数
它没有说明它如何处理作家饥饿问题。
在不了解太多关于 boost 实现的情况下,也许您可以通过您的实现来防止编写者饥饿。当作家存在时,读者可以等待。也许就像这个伪代码:
read() {
while (atomic-write-requests > 0) {
condition.wait();
}
ReadersLock lock(acquireReaderLock());
doRead();
}
write() {
atomic-write-requests++;
WritersLock lock(acquireWriterLock());
doWrite();
atomic-write-requests--;
condition.notify();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4778 次 |
| 最近记录: |