J'ai entendu dire que les mutex récursifs sont evil mais je ne peux pas penser à la meilleure façon de faire fonctionner cette classe sans un.Échange entre un mutex récursif V une classe plus complexe?
class Object {
public:
bool check_stuff() {
lock l(m);
return /* some calculation */;
}
void do_something() {
lock l(m);
if (check_stuff()) {
/* ... */
}
/* ... */
}
private:
mutex m;
}
La fonction do_something()
va interblocage si m
n'est pas récursive, mais quelle est l'alternative à moins d'avoir, disons, deux façons d'effectuer la vérification dont un ne se verrouille pas. Ce choix, comme le suggère le lien ci-dessus, rendra finalement la classe plus complexe, y a-t-il une solution plus simple qui ne nécessite pas de mutex récursif? Ou est-ce un mutex récursif parfois non que mal?
Merci Alex, surtout pour une telle clarté. Je pense que c'est l'approche que je vais adopter. – Eoin
@Eoin, vous êtes les bienvenus! –