私の短縮、簡略化されたクラスは見えます:「ネスト」scoped_lock
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()
を呼び出すときに、スレッドが再び渡す場合同じスレッドをブロックしていないscoped_lock
を作るためにどのような方法がありますA::methodA()
の最初の行にブロック二回と明らかに同じミューテックスでロックに動作しますか?
確かに、私は単にm_mutex.unlock()
と呼ぶことができます。しかし、これはロックを待っている他のスレッドも解放します。これは絶対に私が望むものではありません。
敬具 トビアス
'boost :: mutex'の代わりに' boost :: recursive_mutex'を使用してください。 – BatchyX