【问题标题】:Check optional mutex before scoped locking在范围锁定之前检查可选的互斥锁
【发布时间】:2012-05-25 09:55:15
【问题描述】:

我有一个构造函数,可以选择允许用户将指针传递给 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);

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

【问题讨论】:

    标签: c++ multithreading mutex critical-section scoped-lock


    【解决方案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_;
    };
    

    【讨论】:

    • 我可能会这样做,但另一个解决方案是std::auto_ptr<ScopedLock>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 2019-11-01
    相关资源
    最近更新 更多