2017-11-23 3 views
-2

official code examplegehen verstehen ungepufferte Kanal Beispiel

func sum(s []int, c chan int) { 
    sum := 0 
    for _, v := range s { 
     sum += v 
    } 
    c <- sum // send sum to c 
} 

func main() { 
    s := []int{7, 2, 8, -9, 4, 0} 
    c := make(chan int) 
    go sum(s[:len(s)/2], c) 
    go sum(s[len(s)/2:], c) 
    x := <-c 
    y := <-c 
    fmt.Println(x, y, x+y) 
} 

gedruckt: -5, 17, 12

warum nicht gedruckt 17, -5, 12?

denke ich x 17

Antwort

1

sein sollte Es gibt keine vorgeschriebene Reihenfolge von dem Wert zunächst auf den Kanal geschrieben wird, es ist rein auf die Gnade des Schedulers. Wie das ganze Beispiel tut, ist das Hinzufügen der Ergebnisse, es spielt eigentlich keine Rolle, in welcher Richtung die Ergebnisse erscheinen.

0

Es gibt keine Garantie, in welcher Reihenfolge Ihre go sum(...) Goroutines gestartet werden und welche die ersten sein werden, die beendet werden (und an Kanal senden).