Boost WITH Writer块中的多个读取器、单个写入程序锁定

Multiple-Reader, Single-Writer Lock in Boost WITH Writer Block

本文关键字:单个写 锁定 程序 读取 Writer WITH Boost      更新时间:2023-10-16

这里的答案几乎符合我的要求。

我想要一个读写锁,它将:

  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);
}

但是这里的"writer"方法没有"lock"属性。你的意思是,在"unique_lock"之前,你还需要做"upgrade_lock"吗?类似于:

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
}