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