Sobes.tech
Junior — Middle

Vysvětlete účel a funkci std::condition_variable v C++.

sobes.tech AI

Odpověď od AI

std::condition_variable v C++ se používá k organizaci synchronizace mezi vlákny. Umožňuje jednomu nebo více vláknům čekat na určitá událost, přičemž současně uvolňuje mutex, aby ostatní vlákna mohla měnit stav, na který čeká první vlákno.

Hlavní body:

  • Vlákno volá wait na condition_variable, předává svůj mutex.
  • Během čekání je mutex uvolněn, což umožňuje ostatním vláknům přístup ke sdíleným datům.
  • Když nastane událost, jiné vlákno volá notify_one nebo notify_all, aby probudilo čekající vlákna.
  • Po probuzení si vlákno znovu získá mutex a zkontroluje podmínku.

Příklad použití:

#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();
    // zpracování dat
}

Tímto způsobem condition_variable pomáhá efektivně organizovat čekání a oznámení mezi vlákny bez aktivního pollingu.