Junior — Middle
Dans quelles conditions le blocage est-il effectué lors de l'utilisation du canal de transmission de données standard?
sobes.tech IA
Réponse de l'IA
En Go, le canal de transmission de données standard se bloquee dans les cas suivants :
- Lors de l'envoi d'une valeur dans le canal (
chan <- value), si le canal n'a pas de tampon ou si le tampon est plein, la goroutine d'envoi se bloque jusqu'à ce qu'un autre thread lise la valeur. - Lors de la lecture du canal (
value := <- chan), si le canal est vide, la goroutine de lecture se bloque jusqu'à ce que des données soient disponibles.
Ainsi, le blocage se produit lors de la tentative d'envoyer des données à un canal plein ou de lire d'un canal vide, assurant la synchronisation entre goroutines.
Exemple :
ch := make(chan int) // canal sans tampon
// L'envoi se bloque jusqu'à ce que quelqu'un lise
go func() {
ch <- 42
}()
val := <-ch // la lecture débloque l'envoi
fmt.Println(val)