Middle
Como funciona a variável condicional (sync.Cond) em Go?
sobes.tech IA
Resposta da IA
No Go, sync.Cond é uma variável condicional usada para coordenar goroutines, permitindo que uma ou várias goroutines aguardem a ocorrência de uma condição específica.
Métodos principais:
Wait(): bloqueia a goroutine atual e libera o mutex associado, até queSignal()ouBroadcast()sejam chamados.Signal(): acorda uma goroutine que está esperando na variável condicional.Broadcast(): acorda todas as goroutines que estão esperando na variável condicional.
Exemplo de uso:
var mu sync.Mutex
cond := sync.NewCond(&mu)
// Goroutine que espera a condição
go func() {
mu.Lock()
cond.Wait() // espera o sinal
// condição atendida
mu.Unlock()
}()
// Goroutine que sinaliza
mu.Lock()
// altera o estado que a primeira goroutine espera
cond.Signal() // ou cond.Broadcast()
mu.Unlock()
É importante que Wait() seja chamado com o mutex bloqueado, e ao chamar Wait(), o mutex é liberado temporariamente para que outras goroutines possam alterar o estado e chamar Signal() ou Broadcast(). Após o despertar, Wait() bloqueia novamente o mutex antes de retornar.
Assim, sync.Cond permite sincronizar eficientemente a execução de goroutines com base na mudança de estado.