我缩短的简化类如下所示:
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()
. 但这也会释放等待锁的其他线程——这绝对不是我想要的。
任何的想法?
最好的问候托比亚斯