具有if条件的作用域锁定
Scoped lock with if condition
我想创建作用域锁,但我想要类似的东西:
{
if(lockRequired)
boost::mutex::scoped_lock(Mutex); //After this line we go out of scope
/* Here I also want to have Mutex */
}
若条件为true,我希望有锁互斥,但在升级范围内。我知道我可以使用简单的.lock和在作用域结束时使用.onlock,但我有很多返回路径。我也可以在作用域中创建一些SynchronizationGuard,其中析构函数被称为解锁互斥,但这不是一个干净的解决方案。有什么建议吗?
致以最良好的问候。
使用三元运算符。
boost::mutex::scoped_lock lock = lockRequired ?
boost::mutex::scoped_lock(Mutex) : boost::mutex::scoped_lock();
或者只在条件下使用swap
。
boost::mutex::scoped_lock lock;
if (lockRequired)
{
boost::mutex::scoped_lock lock_(Mutex);
lock.swap(lock_);
}
或者用defer_lock_t
构造锁,然后调用lock
函数。
boost::mutex::scoped_lock lock(Mutex, boost::defer_lock);
if (lockRequired)
{
lock.lock();
}
您可以构造延迟的锁:
#include <boost/thread.hpp>
int main() {
boost::mutex mx;
boost::mutex::scoped_lock sl(mx, boost::defer_lock);
if (condition)
sl.lock();
// sl will unlock on end of scope
}
也适用于std::unique_lock
、std::lock_guard
和相应的升压类型
类似地,还有adopt_lock
标记类型。
相关文章:
- 未在作用域中声明unordered_map
- 有没有一种方法可以在编译时获得作用域类名
- C++quit()函数中可能存在作用域问题
- 未在此作用域OpenCV3.4中声明cvSaveImage
- 全局作用域中函数指针的赋值
- 在类函数中初始化外部作用域变量
- 不同作用域中的静态变量和全局变量
- 是同一作用域的函数部分中的函数调用
- 未在此作用域中声明的函数和变量 (C++)
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 将作用域枚举转换为基础类型
- 表达式必须具有完整或无作用域的枚举图
- 在构造函数中输入对象时C++类成员作用域
- 无法让"std::enable_if"适用于无作用域枚举
- 为什么不能直接引用作用域枚举类成员,而不能为无作用域枚举生成类成员?
- 函数未在作用域中声明 / 如何结合使用 header.h、header.cpp 和 main.cpp?
- 具有if条件的作用域锁定
- 在作用域锁定之前检查可选互斥锁
- C++:Boost::互斥锁分别锁定同一作用域中的多个变量
- 作用域锁定是如何工作的