Sobes.tech
Назад к вопросам
Junior — Middle
111

Объясните назначение и работу std::condition_variable в C++.

Компании, где спрашивали
Samsung Research CenterSamsung Research Center

Ответ от нейросети

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 помогает эффективно организовать ожидание и уведомление между потоками без активного опроса.