在范围锁定之前检查可选的互斥锁

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)

任何人都可以建议一个简洁的解决方案来满足这样的要求吗?

Căt*_*tiș 5

实现与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)