Maison > développement back-end > Golang > Comment les Goroutines de Golang partagent-elles des variables ?

Comment les Goroutines de Golang partagent-elles des variables ?

DDD
Libérer: 2024-11-05 14:11:02
original
551 Les gens l'ont consulté

How Do Goroutines in Golang Share Variables?

Comment les goroutines de Golang partagent des variables

Lors de l'apprentissage des fonctionnalités de concurrence de Golang, une question intéressante se pose : comment les goroutines partagent-elles des variables ? Un exemple simple illustre le comportement nuancé.

Exemple 1

Considérez le code suivant :

<code class="go">package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup

    for i := 0; i < 5; i++ {
        wg.Add(1)

        x := i

        go func() {
            defer wg.Done()
            fmt.Println(x)
        }()
    }

    wg.Wait()
    fmt.Println("Done")
}</code>
Copier après la connexion

Sortie :

<code class="text">4
0
1
3
2</code>
Copier après la connexion

Chaque goroutine imprime correctement la valeur prévue.

Exemple 2

Maintenant, modifions légèrement le code :

<code class="go">package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup

    for i := 0; i < 5; i++ {
        wg.Add(1)

        go func() {
            defer wg.Done()
            fmt.Println(i)
        }()
    }

    wg.Wait()
    fmt.Println("Done")
}</code>
Copier après la connexion

Sortie :

<code class="text">5
5
5
5
5</code>
Copier après la connexion

Explication

La différence entre ces exemples réside dans la façon dont la variable x est capturée par la goroutine. Dans l'exemple 1, une nouvelle variable locale x est créée au sein de chaque goroutine, leur permettant d'accéder à la valeur correcte.

Dans l'exemple 2, cependant, la goroutine capture la variable i, qui est une variable de boucle. Au fur et à mesure que la boucle itère, i est mis à jour, ce qui oblige toutes les goroutines à référencer la même valeur au moment de l'exécution.

Cette différence met en évidence l'importance de la portée des variables dans la simultanéité Go. Pour éviter les conditions de concurrence et les comportements imprévisibles, il est essentiel de capturer la valeur souhaitée dans une nouvelle variable locale.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal