Junior — Middle
De que maneiras pode evitar-se uma situação de bloqueio ao usar canais não bufferizados na programação multithread?
sobes.tech IA
Resposta da IA
Para evitar bloqueios ao usar canais não bufferizados em Go, pode-se:
- Utilizar goroutines para enviar e receber dados simultaneamente, para que não haja situação em que o remetente ou o destinatário aguardem um pelo outro.
- Aplicar select com default, para evitar bloqueios se o canal não estiver pronto para a operação.
- Usar canais bufferizados, se possível, para reduzir a probabilidade de bloqueios.
Exemplo com select e default:
select {
case ch <- value:
// envio bem-sucedido
case val := <-ch:
// recepção bem-sucedida
default:
// nem envio nem recepção estão prontos — evitar bloqueio
}