我是否可以在超出scoped_lock范围之前解锁互斥锁?我怎么能这样做?
{boost::mutex::scoped_lock lock(mutex);
if(conditionaA)
{
if(conditionB)
{
//could I unlock here as I don't want to hold the lock too long.
//perform calculation
}
}
else
{
}
}//lock scope
感谢。
答案 0 :(得分:16)
是
使用unlock()
方法。
{boost::mutex::scoped_lock lock(mutex);
if(conditionaA)
{
if(conditionB)
{
//could I unlock here as I don't want to hold the lock too long.
lock.unlock(); // <--
}
//perform calculation
}
else
{
}
}//lock scope
答案 1 :(得分:6)
是;只需使用.unlock()成员函数。
答案 2 :(得分:2)
boost::mutex::scoped_lock
与boost::unique_lock<mutex>
相同,您可以解锁它们。它必须被你的线程锁定才能执行此操作,否则会出现异常。
unique_lock的析构函数确保在销毁时解锁互斥锁,因此,如果在持有锁的任何时候抛出异常,则使用锁定对象的目的是确保这一点(异常安全)。