Mon raccourci, classe simplifié se présente comme suit:"Nested" 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);
}
Je voudrais synchroniser l'accès à m_myVar
. Lors de l'appel A::methodB()
, le fil passe dans la serrure avec le même mutex deux fois et, évidemment, des blocs sur la première ligne de A::methodA()
Est-il possible de faire scoped_lock
ne bloque pas le même fil lors du passage à nouveau? Je pourrais simplement appeler m_mutex.unlock()
. Mais cela libérerait aussi les autres threads qui attendent sur la serrure - ce qui n'est absolument pas ce que je veux.
Une idée?
Meilleures salutations Tobias
Utilisez un 'boost :: recursive_mutex' au lieu d'un' boost :: mutex' – BatchyX