Verständnis goroutines

Ich versuche zu verstehen, die Parallelität Gehen. Insbesondere, schrieb ich diesen thread-unsafe-Programm:

package main

import "fmt"

var x = 1

func inc_x() { //test
  for {
    x += 1
  }
}

func main() {
  go inc_x()
  for {
    fmt.Println(x)
  }
}

Erkenne ich, dass ich mit sollte-Kanäle um zu verhindern, dass race-conditions mit x, aber das ist nicht der Punkt hier. Das Programm druckt 1 und dann scheint loop forever (ohne Druck nichts mehr). Ich würde erwarten, dass es zu drucken, die eine unendliche Liste der zahlen, möglicherweise überspringen einiger und wiederholen der anderen wegen der race condition (oder noch schlimmer -- drucken der Zahl, während es aktualisiert wird, in inc_x).

Meine Frage ist: Warum funktioniert das Programm nur drucken einer Zeile?

Nur um klar zu sein: ich bin nicht mit Kanälen auf Zweck für dieses Spielzeug Beispiel.

InformationsquelleAutor | 2012-04-10
Schreibe einen Kommentar