Middle+
Que meios de sincronização em Go conheces?
sobes.tech IA
Resposta da IA
Em Go, os principais meios de sincronização de goroutines são:
- Mutex (sync.Mutex) — primitive básica para exclusão mútua, bloqueia o acesso a dados partilhados.
- RWMutex (sync.RWMutex) — mutex estendido que permite a múltiplos leitores lerem simultaneamente, mas bloqueia a escrita.
- WaitGroup (sync.WaitGroup) — permite aguardar a conclusão de um grupo de goroutines.
- Cond (sync.Cond) — variável condicional para notificar as goroutines sobre a ocorrência de um evento.
- Operações atômicas (sync/atomic) — para modificar variáveis de forma segura sem bloqueios.
- Canais (chan) — método idiomático principal para sincronização e transferência de dados entre goroutines.
Exemplo de uso de Mutex:
var mu sync.Mutex
var counter int
func increment() {
mu.Lock()
defer mu.Unlock()
counter++
}
Canais permitem sincronizar a execução e trocar dados:
ch := make(chan int)
go func() {
ch <- 42 // envio de valor
}()
valor := <-ch // recepção de valor