Sobes.tech
Junior — Middle

Objasnite svrhu i rad std::condition_variable u C++.

sobes.tech АИ

Одговор од АИ

std::condition_variable у C++ се користи за организовање синхронизације између нитева. Омогућава једном или више нитева да чекају на одређени догађај, истовремено ослобађајући mutex како би други нитови могли да промене стање на које чека први нит.

Кључне тачке:

  • Нит позива wait на condition_variable, преносећи свој mutex.
  • Током чекања, mutex се ослобађа, омогућавајући другим нитевима приступ заједничким подацима.
  • Када се догађај деси, други нит позива notify_one или notify_all да пробуди чекајуће нитове.
  • После буђења, нит поново преузима mutex и проверава услов.

Пример употребе:

#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();
    // обрада података
}

Овим начином, condition_variable помаже у ефикасној организацији чекања и обавештавања између нитева без активног поллинга.