检查可选的互斥作用域之前锁定(Check optional mutex before scoped

2019-10-16 18:30发布

我有一个构造可选地允许用户在ponter传递到升压互斥。 如果没有互斥被提供时,构件指针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);

任何人都可以提出一个整洁和简单的解决方案,这样的要求?

Answer 1:

实现与scoped_lock的隐藏里面的决定类似自己的包装:包装一个指向互斥锁,并检查是否指针为空(无锁定应用)或不为空(锁定应用)。 一些骨架:

class ScopedLockEx
{
public:
    ScopedLockEx( boost::mutex* pMutex)
       : pMutex_( pMutex)
    {
       if( pMutex_) pMutex_->lock();
    }

    ~ScopedLockEx()
    {
       if( pMutex_) pMutex_->unlock();
    }
private:
    boost::mutex* pMutex_;
};


文章来源: Check optional mutex before scoped locking