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 помаже у ефикасној организацији чекања и обавештавања између нитева без активног поллинга.