Sobes.tech
Junior — Middle

Explica scopul și modul de funcționare al std::condition_variable în C++.

sobes.tech AI

Răspuns de la AI

std::condition_variable în C++ este utilizat pentru a organiza sincronizarea între fire de execuție. Permite unuia sau mai multor fire să aștepte apariția unui eveniment specific, eliberând în același timp un mutex pentru ca alte fire să poată modifica starea pe care o așteaptă primul fir.

Puncte cheie:

  • Firul apelează wait pe condition_variable, transmitând mutex-ul pe care îl deține.
  • În timpul așteptării, mutex-ul este eliberat, permițând altor fire să acceseze datele partajate.
  • Când evenimentul are loc, alt fir apelează notify_one sau notify_all pentru a trezi firele în așteptare.
  • După trezire, firul reobține mutex-ul și verifică condiția.

Exemplu de utilizare:

#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();
    // procesarea datelor
}

Astfel, condition_variable ajută la organizarea eficientă a așteptării și notificării între fire fără polling activ.