Sobes.tech
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 wait aan 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_one of notify_all aan 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.