Explique o que é uma variável condicional e como ela é usada para sincronizar threads.
sobes.tech IA
Resposta da IA
A variável condicional (condition variable) é um mecanismo de sincronização de threads que permite a um ou mais threads esperar que uma determinada condição seja satisfeita, enquanto outro thread os notifica sobre uma mudança de estado.
Em Go, as variáveis condicionais são implementadas através do tipo sync.Cond. Ela funciona junto com um mutex (sync.Mutex), que protege os dados compartilhados. O thread que deseja esperar chama Wait(), liberando o mutex e bloqueando até que outro thread chame Signal() (para acordar um thread) ou Broadcast() (para acordar todos os que estão esperando).
Exemplo de uso:
var mu sync.Mutex
cond := sync.NewCond(&mu)
sharedDataReady := false
// Thread que espera
mu.Lock()
for !sharedDataReady {
cond.Wait() // libera mu e espera o sinal
}
// Aqui sharedDataReady == true
mu.Unlock()
// Thread que altera o estado
mu.Lock()
sharedDataReady = true
cond.Signal() // ou cond.Broadcast(), para acordar os que estão esperando
mu.Unlock()
Assim, a variável condicional ajuda a organizar uma espera e notificação corretas entre threads, evitando sondagens ativas e condições de corrida.