我有一个构造函数,可以选择允许用户将 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_;
};
关于c++ - 在范围锁定之前检查可选的互斥锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10752280/