Un multiplexeur de canaux
Question :
Dans une tentative de créer un multiplexeur de canaux qui combine les sorties de plusieurs canaux en une seule, un programmeur a rencontré un comportement inattendu et demande conseil avec ce qui suit questions :
Réponse :
Le code utilise une boucle for pour créer des goroutines pour chaque canal. Cependant, la variable c est mise à jour à chaque itération de la boucle, ce qui oblige les goroutines à lire toutes sur le même canal. Pour résoudre ce problème, le canal doit être transmis directement à la goroutine :
for _, c := range channels { go func(c <-chan big.Int) { // ... }(c) }
Le code initialise tout valeur de sortie sur "false", ce qui entraîne l'impression de seules valeurs fausses. Ce problème peut être résolu en remplaçant la ligne fmt.Println(l) par fmt.Println(l.String()).
Le modèle d'alimentation est causé par l'erreur susmentionnée dans le code, où les goroutines tentent de lire à partir du même canal. Le correctif ci-dessus devrait résoudre ce problème et permettre une sortie équilibrée de tous les canaux d'entrée.
L'implémentation du multiplexeur fournie est une base approche. Pour les scénarios nécessitant des performances ou une concurrence plus élevées, des options alternatives peuvent envisager la transmission de messages via des canaux ou une primitive de synchronisation comme un mutex.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!