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
waitna 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_oneounotify_allpara 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.