Sobes.tech
Junior — Middle

Explique la finalité et le fonctionnement de std::condition_variable en C++.

sobes.tech IA

Réponse de l'IA

std::condition_variable en C++ est utilisé pour organiser la synchronisation entre threads. Il permet à un ou plusieurs threads d’attendre qu’un événement spécifique se produise, tout en libérant un mutex pour que d’autres threads puissent modifier l’état attendu par le premier thread.

Points clés :

  • Le thread appelle wait sur condition_variable, en passant le mutex qu’il détient.
  • Pendant l’attente, le mutex est libéré, permettant à d’autres threads d’accéder aux données partagées.
  • Lorsqu’un événement se produit, un autre thread appelle notify_one ou notify_all pour réveiller les threads en attente.
  • Après le réveil, le thread reprend la possession du mutex et vérifie la condition.

Exemple d’utilisation :

#include <mutex>
#include <condition_variable>
#include <queue>

std::mutex mtx;
std::condition_variable cv;
std::queue<int> dataQueue;

void producer() {
    std::unique_lock<std::mutex> lock(mtx);
    dataQueue.push(42);
    cv.notify_one();
}

void consumer() {
    std::unique_lock<std::mutex> lock(mtx);
    cv.wait(lock, []{ return !dataQueue.empty(); });
    int data = dataQueue.front();
    dataQueue.pop();
    // traitement des données
}

Ainsi, condition_variable aide à organiser efficacement l’attente et la notification entre threads sans polling actif.