Sobes.tech
Junior — Middle

Comment assurer un verrouillage atomique de deux mutex pour éviter les blocages mutuels?

sobes.tech IA

Réponse de l'IA

Pour éviter les blocages mutuels (deadlock) lors du verrouillage atomique de deux mutex, vous pouvez utiliser les approches suivantes :

  1. Toujours verrouiller les mutex dans le même ordre. C'est la méthode la plus simple et la plus courante pour éviter les deadlocks.

  2. Utiliser std::lock (C++11 et supérieur). Cette fonction verrouille plusieurs mutex en même temps, garantissant l'absence de deadlock.

Exemple avec std::lock :

#include <mutex>

std::mutex m1, m2;

void func() {
    std::lock(m1, m2); // verrouille les deux mutex de façon atomique
    std::lock_guard<std::mutex> lock1(m1, std::adopt_lock);
    std::lock_guard<std::mutex> lock2(m2, std::adopt_lock);
    // section critique
}

Ici, std::lock verrouille les deux mutex, et std::lock_guard avec le drapeau std::adopt_lock prend le contrôle des mutex déjà verrouillés.