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
waitsu 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_oneonotify_allper 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.