1

我有一个构造函数,可以选择允许用户将 ponter 传递给 Boost 互斥体。如果未提供互斥锁,则成员指针pMyMutex设置为NULL。如果他们愿意,这使用户可以选择应用一些线程安全。但是,出于明显的原因,我不能将 ascoped_lock与这种检查一起使用:)

if (pMyMutex != NULL)
    const boost::mutex::scoped_lock l(*pMyMutex);

//The lock is already out of scope
processStuff(x, y, z);

任何人都可以为这种要求提出一个简洁而简单的解决方案吗?

4

1 回答 1

5

实现您自己的与 scoped_lock 类似的包装器以隐藏其中的决定:包装指向互斥锁的指针并检查指针是否为空(未应用锁定)或非空(应用锁定)。一些骨架:

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

    ~ScopedLockEx()
    {
       if( pMutex_) pMutex_->unlock();
    }
private:
    boost::mutex* pMutex_;
};
于 2012-05-25T10:00:06.733 回答