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

标签 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);

谁能针对这样的要求提出一个简洁明了的解决方案?

最佳答案

实现您自己的类似于 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/

相关文章:

c++ - 指针算术混淆

c++ - 在多线程环境中使用 auto_ptr 交换对象而不锁定是安全的吗?

c++ - 根据 “T”是否具有成员函数 “myfunc”来重载函数模板?

java - 如何配置ThreadPoolExecutor来限制线程数

locking - 我需要Dart中的Mutex

c# - 创建 Mutex 时出现 "Could not find a part of the path"错误

c++ - 从 C#/Java 到 C++ : Understanding C++ references in an example?

c# - 如何异步更新 winform?

c# - 在计时器中使用QueueUserWorkItem时发生ThreadStateException

c - 尝试获取 pthread_mutex_lock(&mutex) 的线程如果没有获得锁会怎样?