lea*_*vst 1 c++ multithreading mutex critical-section scoped-lock
我有一个构造函数,可以选择允许用户将一个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);
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议一个简洁的解决方案来满足这样的要求吗?
实现与scoped_lock类似的自己的包装器以隐藏其中的决策:将指针包装到互斥锁并检查指针是否为空(未应用锁定)或不是null(应用锁定).一些骨架:
class ScopedLockEx
{
public:
ScopedLockEx( boost::mutex* pMutex)
: pMutex_( pMutex)
{
if( pMutex_) pMutex_->lock();
}
~ScopedLockEx()
{
if( pMutex_) pMutex_->unlock();
}
private:
boost::mutex* pMutex_;
};
Run Code Online (Sandbox Code Playgroud)