Maison > développement back-end > Golang > le corps du texte

WaitGroup.Wait() agit-il comme une barrière de mémoire dans Go ?

Barbara Streisand
Libérer: 2024-10-26 11:32:02
original
131 Les gens l'ont consulté

 Does WaitGroup.Wait() Act as a Memory Barrier in Go?

WaitGroup.Wait() garantit-il une barrière mémoire ?

Considérez l'extrait de code suivant :

var condition bool
var wg sync.WaitGroup
for _, item := range items {
    wg.Add(1)
    go func(item) {
        if meetsCondition(item) {
            condition = true
        }
        wg.Done()
    }(item)
}
wg.Wait()
// is it safe to check condition here?
Copier après la connexion

Le la question se pose de savoir s'il est sûr de vérifier la variable de condition après le retour de wg.Wait(). La documentation officielle de Go ne mentionne explicitement aucune implication de barrière de mémoire, mais la documentation WaitGroup indique que Wait se bloque jusqu'à ce que le compteur du groupe d'attente atteigne zéro.

Solution

Oui, il est prudent de vérifier la variable de condition après le retour de wg.Wait(). Il existe une relation implicite qui se produit avant entre wg.Wait() et wg.Done(). Lorsqu'une goroutine appelle wg.Done(), elle garantit que toutes ses opérations terminées deviennent visibles pour les autres goroutines qui ont déjà appelé wg.Wait(). Par conséquent, wg.Wait() agit efficacement comme une barrière de mémoire, garantissant que la variable de condition est mise à jour avant la vérification après le retour de wg.Wait().

Cette relation qui se produit avant n'est pas explicitement documentée mais a été confirmé par les développeurs de Go. Reportez-vous au fil de discussion du forum Go ici pour plus de détails.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!