Назад к вопросам
Samsung Research Center
Junior — Middle
111
Объясните назначение и работу std::condition_variable в C++.
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
std::condition_variable в C++ используется для организации синхронизации между потоками. Она позволяет одному или нескольким потокам ждать наступления определённого события, при этом освобождая при этом мьютекс, чтобы другие потоки могли изменить состояние, которое ждёт первый поток.
Основные моменты:
- Поток вызывает
waitна condition_variable, передавая мьютекс, который он держит. - Во время ожидания мьютекс освобождается, позволяя другим потокам получить доступ к разделяемым данным.
- Когда событие происходит, другой поток вызывает
notify_oneилиnotify_all, чтобы разбудить ожидающие потоки. - После пробуждения поток снова захватывает мьютекс и проверяет условие.
Пример использования:
#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();
// обработка data
}
Таким образом, condition_variable помогает эффективно организовать ожидание и уведомление между потоками без активного опроса.