Back to questions
Samsung Research Center
Junior — Middle
113
Объясните назначение и работу std::condition_variable в C++.
Companies where asked
Answer from AI
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 помогает эффективно организовать ожидание и уведомление между потоками без активного опроса.