Heim  >  Artikel  >  Backend-Entwicklung  >  Wie teilen Goroutinen in Golang Variablen?

Wie teilen Goroutinen in Golang Variablen?

DDD
DDDOriginal
2024-11-05 14:11:02459Durchsuche

How Do Goroutines in Golang Share Variables?

Wie Goroutinen in Golang Variablen teilen

Beim Erlernen der Parallelitätsfunktionen von Golang stellt sich eine interessante Frage: Wie teilen Goroutinen Variablen? Ein einfaches Beispiel veranschaulicht das differenzierte Verhalten.

Beispiel 1

Betrachten Sie den folgenden Code:

<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>

Ausgabe:

<code class="text">4
0
1
3
2</code>

Jede Goroutine gibt den beabsichtigten Wert korrekt aus.

Beispiel 2

Jetzt ändern wir den Code leicht:

<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>

Ausgabe:

<code class="text">5
5
5
5
5</code>

Erklärung

Der Unterschied zwischen diesen Beispielen liegt darin, wie die Variable x von der Goroutine erfasst wird. In Beispiel 1 wird in jeder Goroutine eine neue lokale Variable x erstellt, die es ihnen ermöglicht, auf den richtigen Wert zuzugreifen.

In Beispiel 2 erfasst die Goroutine jedoch die Variable i, die eine Schleifenvariable ist. Während die Schleife iteriert, wird i aktualisiert, was dazu führt, dass alle Goroutinen zur Laufzeit auf denselben Wert verweisen.

Dieser Unterschied unterstreicht die Bedeutung des Variablenbereichs in der Go-Parallelität. Um Race Conditions und unvorhersehbares Verhalten zu vermeiden, ist es wichtig, den beabsichtigten Wert in einer neuen lokalen Variablen zu erfassen.

Das obige ist der detaillierte Inhalt vonWie teilen Goroutinen in Golang Variablen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn