私の短縮された単純化されたクラスは次のようになります。
class A
{
public:
// ...
methodA();
methodB();
protected:
mutable boost::mutex m_mutex;
sometype* m_myVar;
}
A::methodA( int someParam )
{
boost::mutex::scoped_lock myLock(m_mutex);
m_myVar->doSomethingElse();
}
A::methodB( int someParam )
{
boost::mutex::scoped_lock myLock(m_mutex);
m_myVar->doSomething();
this->methodA(someParam);
}
へのアクセスを同期したいと思いますm_myVar
。を呼び出すA::methodB()
と、スレッドは同じミューテックスで2回ロックに遭遇し、明らかに最初の行でブロックしますA::methodA()
再度渡すときに同じスレッドscoped_lock
をブロックしないようにする方法はありますか?
もちろん、私は単純に を呼び出すことができますm_mutex.unlock()
。しかし、これにより、ロックを待機している他のスレッドも解放されます。これは、私が望んでいることではありません。
何か案が?
宜しくお願いします トバイアス