Junior — Middle
Qual é o papel do mecanismo de bloqueio de canal no contexto da interação entre processos ou programação concorrente?
sobes.tech IA
Resposta da IA
Em Go, o mecanismo de bloqueio de canais é usado para sincronizar goroutines durante a troca de dados. Os canais podem ser com buffer ou sem buffer (não buffered). No caso de um canal não buffered, o envio e a recepção bloqueiam até que ambas as partes estejam prontas, garantindo uma troca de dados segura sem condições de corrida.
Por exemplo, se uma goroutine tenta enviar dados para um canal, mas o receptor ainda não está pronto para receber, a operação de envio é bloqueada, e vice-versa. Isso permite coordenar e evitar condições de corrida sem mutex explícitos.
Exemplo:
ch := make(chan int) // canal não bloqueante
// Enviando em uma goroutine
go func() {
ch <- 42 // bloqueia até que alguém leia
}()
// Recebendo na goroutine principal
val := <-ch // bloqueia até que um valor apareça
fmt.Println(val) // 42
Assim, o bloqueio do canal serve para uma troca de dados segura e ordenada entre processos ou goroutines concorrentes.