具有写入器块的Boost中的多读取器,单写入器锁定

时间:2014-09-16 22:54:29

标签: c++ multithreading boost mutex

答案here 几乎符合我的要求。

我想要一个读写锁:

  1. 只要没有作家
  2. ,允许读者锁定
  3. 如果作家试图锁定,阻止新读者接受它,但允许旧读者在给作者锁定之前完成
  4. 一旦作家释放锁定,允许新读者
  5. 上述实施不符合标准(2)。它允许新读者抓住锁定并阻止编写器直到它们完成。

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

但是你的作家&#34;方法没有&#34;锁定&#34;属性。你的意思是&#34; unique_lock&#34;你仍然需要做&#34; upgrade_lock&#34;?类似的东西:

void writer()
{
    // get upgradable access
    boost::upgrade_lock<boost::shared_mutex> lock(_access);

    // get exclusive access
    boost::unique_lock<boost::shared_mutex> uniqueLock(lock);
    // now we have exclusive access
}

或者您是否混合了属性,它应该是:

void writer()
{
    boost::unique_lock<boost::shared_mutex> uniqueLock(_access);
    // now we have exclusive access
}