Sobes.tech
Junior — Middle

Vysvetlite účel a fungovanie std::condition_variable v C++.

sobes.tech AI

Odpoveď od AI

std::condition_variable v C++ sa využíva na organizáciu synchronizácie medzi vláknami. Umožňuje jednému alebo viacerým vláknam čakať na určitú udalosť, pričom súčasne uvoľňuje mutex, aby iné vlákna mohli meniť stav, na ktorý čaká prvé vlákno.

Hlavné body:

  • Vlákno volá wait na condition_variable, odovzdávajúc svoj mutex.
  • Počas čakania je mutex uvoľnený, čo umožňuje iným vláknam prístup k zdieľaným dátam.
  • Keď sa udalosť stane, iné vlákno volá notify_one alebo notify_all, aby prebudilo čakajúce vlákna.
  • Po prebudení si vlákno opäť získa mutex a skontroluje podmienku.

Príklad použitia:

#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();
    // spracovanie dát
}

Týmto spôsobom condition_variable pomáha efektívne organizovať čakanie a oznámenie medzi vláknami bez aktívneho pollingovania.