Sobes.tech
Junior — Middle

Quais métodos permitem evitar deadlocks ao trabalhar com multithreading?

sobes.tech IA

Resposta da IA

Em Go, para evitar deadlocks ao trabalhar com concorrência, aplicam-se várias abordagens:

  • Evitar dependências cíclicas: sempre adquirir os mutex na mesma ordem.
  • Usar canais: eles permitem trocar dados de forma segura entre goroutines sem bloqueios explícitos.
  • Usar timeouts e contextos: com context.Context, é possível cancelar operações para evitar esperas infinitas.
  • Minimizar o tempo de retenção de bloqueios: manter o mutex bloqueado apenas por uma curta seção crítica.

Exemplo de uso de canais para sincronização:

ch := make(chan int)
go func() {
    ch <- 1 // enviar valor
}()
valor := <-ch // receber valor
fmt.Println(valor)

Essa abordagem ajuda a evitar bloqueios relacionados a mutexes.