3 votes

L'écriture sur deux canaux distincts est-elle séquentielle et fiable ?

Si j'ai une sélection sur deux canaux :

for {
    select {
    case <-chan1:
        // do something
    case <-chan2:
        // do something else
    }
}

Et dans une goroutine séparée, j'écris séquentiellement sur ces canaux :

chan1 <- "blah"
chan2 <- true

Suis-je assuré de voir "faire quelque chose" s'exécuter avant "faire autre chose" ?

Je sais que select choisit aléatoirement s'il a deux canaux non bloqués, mais je pensais que l'écriture sur le premier canal pourrait "interrompre" de manière fiable la goroutine d'écriture si select est déjà en train de bloquer, ce qui impliquerait que select s'exécuterait sur le premier canal non bloqué avant la seconde écriture.

6voto

Volker Points 6807

Oui, vous pouvez vous y fier si les canaux ne sont pas tamponnés. Voir l'article Modèle Go Memory .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X