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.