在作用域锁定之前检查可选互斥锁

Check optional mutex before scoped locking

本文关键字:检查 作用域 锁定      更新时间:2023-10-16

我有一个构造函数,可以选择允许用户将 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_;
};