1

オプションで、ユーザーがポンターを Boost ミューテックスに渡すことを可能にするコンストラクターがあります。ミューテックスが指定されていない場合、メンバー ポインターpMyMutexは に設定されNULLます。これにより、ユーザーは必要に応じてスレッド セーフを適用することができます。ただし、scoped_lock明らかな理由から、この種のチェックでは a を使用できません:)

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と同様の独自のラッパーを実装して、その中の決定を非表示にします。ミューテックスへのポインターをラップし、ポインターがnull(ロックが適用されていない)またはnullでない(ロックが適用されている)かどうかを確認します。いくつかのスケルトン:

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 に答える