答案here 几乎做我想做的事。
我想要一个读写锁:
- 只要没有写者就允许读者拿锁
- 如果作者尝试锁定,阻止新读者使用它,但允许老读者在给作者锁定之前完成
- 一旦作者释放锁,允许新的读者
上述实现不符合标准 (2)。它允许新读者捕获锁并阻止作者,直到他们完成。
最佳答案
找到了。我需要 unique_lock
而不是 upgrade_to_unique_lock
:
boost::shared_mutex _access;
void reader()
{
// get shared access
boost::shared_lock<boost::shared_mutex> lock(_access);
}
void writer()
{
// wait for old shared access readers to finish
// but block out new shared access readers
boost::unique_lock<boost::shared_mutex> uniqueLock(_access);
}
关于c++ - Boost WITH Writer block 中的多读取器、单写入器锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25879660/