Sobes.tech
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 помага ефективно да се организира очакването и уведомяването между нишки без активен опрос.