package main
import "fmt"
func sum(a []int, c chan int) {
sum := 0
for _, v := range a {
sum += v
}
c <- sum // send sum to c
}
func main() {
a := []int{7, 2, 8, -9, 4, 0}
c := make(chan int)
go sum(a[len(a)/2:], c)
go sum(a[:len(a)/2], c)
x, y := <-c, <-c // receive from c
fmt.Println(x, y, x+y)
}
x, y := <-c, <-c // receive from c
goroutine輸出到頻道順序固定?
爲什麼這條線總是打印相同的結果呢?
我覺得應該是50/50機會打印 17 -5 12
或 -5 17 12
我覺得兩個走程序應該是平行的
提前感謝!
package main
import "fmt"
import "time"
import "math/rand"
func sum(a []int, c chan int) {
sum := 0
for _, v := range a {
sum += v
}
time.Sleep(time.Millisecond * time.Duration(rand.Intn(1000)))
c <- sum // send sum to c
}
func main() {
a := []int{7, 2, 8, -9, 4, 0}
c := make(chan int)
go sum(a[len(a)/2:], c)
go sum(a[:len(a)/2], c)
x, y := <-c, <-c // receive from c
fmt.Println(x, y, x+y)
}
我讓線程睡覺,但同樣的事情發生。我仍然感到困惑。
您使用的是Go 1.5嗎?還有多少核心? – OneOfOne
是go1.5一個核心 – Shawn
@Shawn把睡眠放在這樣的功能的末尾不會有你正在尋找的效果。此外,主函數並不等待終止之前的睡眠完成執行,所以睡眠基本上什麼都不做。 –