c++ - Boost WITH Writer block 中的多读取器、单写入器锁定

标签 c++ multithreading boost mutex

答案here 几乎做我想做的事。

我想要一个读写锁:

  1. 只要没有写者就允许读者拿锁
  2. 如果作者尝试锁定,阻止新读者使用它,但允许老读者在给作者锁定之前完成
  3. 一旦作者释放锁,允许新的读者

上述实现不符合标准 (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/

相关文章:

c++ - 比较日期 C++(使用 boost )

c++ - 如何强制编译 Boost 以使用 -fPIC

C++14 使用捕获说明符在 lambda 函数内部递增一个值

c++ - 通过析构函数删除动态成员导致程序挂起

multithreading - <Spring Batch> 为什么使 ItemReader 线程安全会导致我们失去可重新启动性?

multithreading - 线程名称——你什么时候需要知道它们?

c++ - Boost 程序选项,空字符串处理

c++ - 从 C++ std::vector 中删除元素

c++ - constexpr 使用标准库算法

java - 让线程从 Java 中的事件监听器运行?