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ă
waitpe 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_onesaunotify_allpentru 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.