Sobes.tech
Junior — Middle

Explique a finalidade e o funcionamento do std::condition_variable em C++.

sobes.tech IA

Resposta da IA

std::condition_variable em C++ é usado para organizar a sincronização entre threads. Permite que um ou vários threads esperem que um evento específico aconteça, liberando ao mesmo tempo um mutex para que outros threads possam modificar o estado que o primeiro thread está aguardando.

Pontos principais:

  • O thread chama wait na condition_variable, passando o mutex que possui.
  • Durante a espera, o mutex é liberado, permitindo que outros threads acessem os dados compartilhados.
  • Quando o evento ocorre, outro thread chama notify_one ou notify_all para acordar os threads esperando.
  • Após o despertar, o thread readquire o mutex e verifica a condição.

Exemplo de uso:

#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();
    // processamento de data
}

Dessa forma, condition_variable ajuda a organizar de forma eficiente a espera e notificação entre threads sem polling ativo.