Maison > développement back-end > Golang > Comment résoudre l'impasse de Go « Tous les Goroutines sont endormis » dans la communication Goroutine ?

Comment résoudre l'impasse de Go « Tous les Goroutines sont endormis » dans la communication Goroutine ?

Mary-Kate Olsen
Libérer: 2024-12-14 11:20:19
original
332 Les gens l'ont consulté

How to Resolve Go's

Impasse dans Go : comprendre et résoudre « Tous les Goroutines sont endormis »

Dans l'extrait de code Go fourni, une impasse se produit en raison d'un incompréhension de la communication goroutine. Le programme vise à simuler le chargement et le déchargement de camions, en utilisant des goroutines pour gérer le déchargement des camions. Cependant, le code ne parvient pas à fermer le canal des camions (ch) lorsque le processus de chargement est terminé, ce qui entraîne une impasse.

Pour résoudre cette impasse, il est crucial de fermer le canal des camions (ch) une fois que tous les camions ont été chargés. Cela signale à la goroutine UnloadTrucks qu'aucun autre camion ne sera envoyé, lui permettant de revenir.

Une façon d'y parvenir consiste à utiliser un WaitGroup, comme démontré dans le code suivant :

// Define a WaitGroup to track the completion of the loading goroutines
var wg sync.WaitGroup

// Start goroutines to load trucks
go func() {
    // Load trucks and send them over the truck channel
    for t := range trucks {
        go func(tr Truck) {
            itm := Item{}
            itm.name = "Groceries"

            fmt.Printf("Loading %s\n", tr.name)
            tr.Cargo = append(tr.Cargo, itm)
            ch <- tr

            wg.Done() // Signal the WaitGroup that the loading is complete
        }(trucks[t])
    }
}()

// Use the WaitGroup to wait for all loading goroutines to complete
wg.Wait()

// Close the truck channel after all loading is finished
close(ch)

// Start the UnloadTrucks goroutine
UnloadTrucks(ch)
Copier après la connexion

En fermant le canal des camions (ch) une fois que tous les camions ont été chargés, la goroutine UnloadTrucks est autorisée à se terminer, sortant ainsi de l'impasse. Le programme va maintenant se terminer avec succès, déchargeant tous les camions comme prévu.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal