如果条件限制锁定

DDD*_*DDD 4 c++ boost

我想创建范围锁,但我想要像:

{
    if(lockRequired)
        boost::mutex::scoped_lock(Mutex); //After this line we go out of scope
    /* Here I also want to have Mutex */
}
Run Code Online (Sandbox Code Playgroud)

如果condition为true我想要锁定互斥锁但是在升级范围内.我知道我可以使用简单的.lock并且在范围结束时使用.unlock但是我有很多返回路径.我也可以在范围内创建一些SynchronizationGuard,并且whed析构函数被称为解锁互斥锁,但它不是干净的解决方案.一些建议?

最好的祝福.

For*_*veR 6

使用三元运算符.

boost::mutex::scoped_lock lock = lockRequired ? 
boost::mutex::scoped_lock(Mutex) : boost::mutex::scoped_lock();
Run Code Online (Sandbox Code Playgroud)

或者只是swap在条件下使用.

boost::mutex::scoped_lock lock;
if (lockRequired)
{
   boost::mutex::scoped_lock lock_(Mutex);
   lock.swap(lock_);
}
Run Code Online (Sandbox Code Playgroud)

或者只是构造锁定defer_lock_t然后调用lock函数.

boost::mutex::scoped_lock lock(Mutex, boost::defer_lock);
if (lockRequired)
{
   lock.lock();
}
Run Code Online (Sandbox Code Playgroud)