Junior — Middle
Leg uit wat de functie en werking van std::condition_variable in C++ is.
sobes.tech AI
Antwoord van AI
std::condition_variable in C++ wordt gebruikt om de synchronisatie tussen threads te organiseren. Het stelt één of meerdere threads in staat te wachten op een bepaald evenement, terwijl tegelijkertijd een mutex wordt vrijgegeven zodat andere threads de toestand kunnen wijzigen waarop de eerste thread wacht.
Belangrijke punten:
- De thread roept
waitaan op condition_variable, waarbij de mutex wordt doorgegeven die hij bezit. - Tijdens het wachten wordt de mutex vrijgegeven, zodat andere threads toegang hebben tot gedeelde gegevens.
- Wanneer het evenement plaatsvindt, roept een andere thread
notify_oneofnotify_allaan om de wachtende threads wakker te maken. - Na het wakker worden, herneemt de thread de mutex en controleert de voorwaarde.
Voorbeeld van gebruik:
#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();
// verwerking van data
}
Op deze manier helpt condition_variable om wachten en notificatie tussen threads efficiënt te organiseren zonder actief polling.