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á
waitna 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_onenebonotify_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.