"嵌套"scoped_lock

Atm*_*ons 7 c++ scoped-lock boost-mutex

我缩短的简化课程如下:

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);
}
Run Code Online (Sandbox Code Playgroud)

我想同步访问m_myVar.在调用时A::methodB(),线程会使用相同的互斥锁两次进入锁定状态,并且明显会阻塞第一行A::methodA()

有没有办法在再次传递时scoped_lock不阻止同一个线程

当然,我只是可以打电话m_mutex.unlock().但这也会释放其他线程等待锁定 - 这绝对不是我想要的.

任何的想法?

最好的问候托比亚斯

Art*_*yom 12

这是boost::recursive_mutex因为它允许通过相同的线程获得锁定而没有多次死锁.用它代替boost::mutex