Sobes.tech
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