Мой сокращенный, упрощенный класс выглядит следующим образом:
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()
поток сталкивается с блокировкой с одним и тем же мьютексом дважды и, очевидно, блокируется в первой строке A::methodA()
. Есть ли способ заставить scoped_lock
не блокировать нить при повторном прохождении?
Конечно, я просто мог бы позвонить m_mutex.unlock()
.Но это освободило бы другие потоки, ожидающие блокировки, а это совершенно не то, что я хочу.
Есть идеи?
С наилучшими пожеланиями, Тобиас