在作用域锁定之前检查可选互斥锁
Check optional mutex before scoped locking
我有一个构造函数,可以选择允许用户将 ponter 传递给 Boost 互斥锁。如果未提供互斥锁,则成员指针pMyMutex
设置为 NULL
。这使用户可以根据需要选择应用一些线程安全性。但是,由于显而易见的原因,我不能将scoped_lock
与这种检查一起使用:)
if (pMyMutex != NULL)
const boost::mutex::scoped_lock l(*pMyMutex);
//The lock is already out of scope
processStuff(x, y, z);
谁能为这样的要求提出一个简洁明了的解决方案?
实现你自己的包装器,类似于scoped_lock来隐藏其中的决定:包装指向互斥锁的指针并检查指针是空的(未应用锁定)还是不为空(应用锁定)。一些骨架:
class ScopedLockEx
{
public:
ScopedLockEx( boost::mutex* pMutex)
: pMutex_( pMutex)
{
if( pMutex_) pMutex_->lock();
}
~ScopedLockEx()
{
if( pMutex_) pMutex_->unlock();
}
private:
boost::mutex* pMutex_;
};
相关文章:
- 未在作用域中声明unordered_map
- 有没有一种方法可以在编译时获得作用域类名
- C++quit()函数中可能存在作用域问题
- 未在此作用域OpenCV3.4中声明cvSaveImage
- 全局作用域中函数指针的赋值
- 在类函数中初始化外部作用域变量
- 不同作用域中的静态变量和全局变量
- 是同一作用域的函数部分中的函数调用
- 未在此作用域中声明的函数和变量 (C++)
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 将作用域枚举转换为基础类型
- 表达式必须具有完整或无作用域的枚举图
- 在构造函数中输入对象时C++类成员作用域
- 无法让"std::enable_if"适用于无作用域枚举
- 为什么不能直接引用作用域枚举类成员,而不能为无作用域枚举生成类成员?
- 在一个作用域中推送五个对象指针,然后检查对象的布尔值是否为 false,会给出错误
- 如何在C++中检查变量是否在作用域中
- 使用 clang llvm 检查变量在任意源位置的作用域是否具有范围
- 在作用域锁定之前检查可选互斥锁
- 使用枚举进行类型检查——如何正确确定作用域