所以我有一些shared_mutex并这样做了:
boost::upgrade_lock<boost::shared_mutex> lock(f->mutex);
boost::upgrade_to_unique_lock<boost::shared_mutex> uniqueLock(lock);
现在我想“解锁它”或至少将其降级为:
boost::shared_lock<boost::shared_mutex> lock_r(f->mutex);
这样的事该怎么办呢?是否可以?
如果你让upgrade_to_unique_lock
超出范围,它会自动降级回升级所有权。
例如
void foo() {
boost::upgrade_lock<boost::shared_mutex> lock(f->mutex);
// Do shared operations, as mutex is held upgradeable
// ...
if(need_to_get_unique)
{
boost::upgrade_to_unique_lock<boost::shared_mutex> uniqueLock(lock);
// Do exclusive operations, as mutex is held uniquely
// ...
// At end of scope unique is released back to upgradeable
}
// Only shared operations here, as it's only held upgradeable
// ...
// At end of scope mutex is completely released
}
编辑:另一件事。如果给定函数只需要独占锁,则可以使用boost::unique_lock
并唯一锁定,无需经过两个upgrade
and upgrade_to_unique
locks.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)