答案here 几乎符合我的要求。
我想要一个读写锁:
上述实施不符合标准(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
}