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