我的縮短,簡化類看起來如下:「嵌套」的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()
,線程運行與相同的互斥鎖兩次,顯然對A::methodA()
第一線塊有沒有什麼辦法,使scoped_lock
再次路過時,不堵同一個線程?
當然,我只是可以打電話m_mutex.unlock()
。但是,這將釋放其他線程等待鎖 - 這是絕對不是我想要的。
有什麼想法?
問候 托比亞斯
使用'boost :: recursive_mutex'而不是'boost :: mutex' – BatchyX