Sobes.tech
Junior — Middle

Spiega lo scopo e il funzionamento di std::condition_variable in C++.

sobes.tech AI

Risposta dell'AI

std::condition_variable in C++ viene utilizzato per organizzare la sincronizzazione tra thread. Permette a uno o più thread di attendere che si verifichi un evento specifico, rilasciando contemporaneamente un mutex affinché altri thread possano modificare lo stato che il primo thread sta aspettando.

Punti principali:

  • Il thread chiama wait su condition_variable, passando il mutex che possiede.
  • Durante l’attesa, il mutex viene rilasciato, consentendo ad altri thread di accedere ai dati condivisi.
  • Quando si verifica l’evento, un altro thread chiama notify_one o notify_all per svegliare i thread in attesa.
  • Dopo il risveglio, il thread riacquisisce il mutex e verifica la condizione.

Esempio di utilizzo:

#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();
    // elaborazione dei dati
}

In questo modo, condition_variable aiuta a organizzare in modo efficiente l’attesa e la notifica tra thread senza polling attivo.