Sobes.tech
Junior — Middle

Quel est le rôle du mécanisme de verrouillage de canal dans le contexte de l'interaction entre processus ou de la programmation concurrente?

sobes.tech IA

Réponse de l'IA

En Go, le mécanisme de blocage des canaux est utilisé pour synchroniser les goroutines lors de l’échange de données. Les canaux peuvent être tamponnés ou non tamponnés (sans tampon). Dans le cas d’un canal non tamponné, l’envoi et la réception sont bloqués jusqu’à ce que les deux parties soient prêtes, assurant ainsi un échange de données sécurisé sans conditions de course.

Par exemple, si une goroutine tente d’envoyer des données sur un canal, mais que le récepteur n’est pas encore prêt à recevoir, l’envoi est bloqué, et vice versa. Cela permet de coordonner et d’éviter les conditions de course sans mutex explicites.

Exemple :

ch := make(chan int) // canal non tamponné

// Envoi dans une goroutine
 go func() {
    ch <- 42 // se bloque jusqu’à ce que quelqu’un lise
}()

// Réception dans la goroutine principale
val := <-ch // se bloque jusqu’à ce qu’une valeur apparaisse
fmt.Println(val) // 42

Ainsi, le blocage du canal sert à un échange de données sécurisé et ordonné entre processus ou goroutines concurrents.