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