La mia classe ridotta, semplificata appare come segue:"nidificate" 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);
}
vorrei sincronizzare l'accesso su m_myVar
. Quando si chiama A::methodB()
, il filo scorre nella serratura con lo stesso mutex due volte e, ovviamente, blocchi sulla prima linea di A::methodA()
C'è un modo per rendere scoped_lock
non bloccare il stesso filo quando passa di nuovo?
Certo, potrei semplicemente chiamare m_mutex.unlock()
. Ma questo libererebbe anche gli altri thread che attendono il blocco, il che non è assolutamente quello che voglio.
Qualche idea?
migliori saluti Tobias
Utilizza un 'boost :: recursive_mutex' invece di un' boost :: mutex' – BatchyX