Mi, clase simplificado acortada se ve de la siguiente manera:"anidada" 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);
}
me gustaría sincronizar el acceso en m_myVar
. Al llamar A::methodB()
, el hilo se ejecuta en la cerradura con el mismo mutex dos veces y, obviamente, los bloques en la primera línea de A::methodA()
¿Hay alguna manera de hacer scoped_lock
no bloquear la mismo hilo al pasar de nuevo?
Claro, simplemente podría llamar al m_mutex.unlock()
. Pero esto liberaría los otros hilos que también estaban esperando en la cerradura, lo cual no es lo que quiero.
¿Alguna idea?
Saludos Tobias
Use un 'boost :: recursive_mutex' en lugar de un' boost :: mutex' – BatchyX