Junior — Middle
Обяснете предназначението и работата на std::condition_variable в C++.
sobes.tech AI
Отговор от AI
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 помага ефективно да се организира очакването и уведомяването между нишки без активен опрос.