boost :: scoped_lock解锁

时间:2011-01-11 09:03:41

标签: c++ boost

我是否可以在超出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

感谢。

3 个答案:

答案 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_lockboost::unique_lock<mutex>相同,您可以解锁它们。它必须被你的线程锁定才能执行此操作,否则会出现异常。

unique_lock的析构函数确保在销毁时解锁互斥锁,因此,如果在持有锁的任何时候抛出异常,则使用锁定对象的目的是确保这一点(异常安全)。