Junior — Middle
¿En qué condiciones se realiza el bloqueo al trabajar con el canal de transmisión de datos estándar?
sobes.tech AI
Respuesta de la IA
En Go, el canal de transmisión de datos estándar se bloquea en los siguientes casos:
- Al enviar un valor al canal (
chan <- value), si el canal no tiene búfer o si el búfer está lleno, la gorutina que envía se bloquea hasta que otro hilo lea el valor. - Al leer del canal (
value := <- chan), si el canal está vacío, la gorutina que lee se bloquea hasta que haya datos disponibles.
Por lo tanto, el bloqueo ocurre al intentar enviar datos a un canal lleno o leer de un canal vacío, asegurando la sincronización entre gorutinas.
Ejemplo:
ch := make(chan int) // canal sin búfer
// La envío se bloquea hasta que alguien lea
go func() {
ch <- 42
}()
val := <-ch // la lectura desbloquea el envío
fmt.Println(val)