Go Channel 的疑惑

官方的一道demo

package main

import "fmt"

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) // 7,2,8 = 17

    go sum(s[len(s)/2:], c) // -9,4,0 = -5

    x, y := <-c, <-c // receive from c
    //
    fmt.Println(x, y, x+y) // 17,-5,12
}

正常按照先进先出结果应该是 17,-5,12
为何打印出的结果是 -5,17,12 。
不解。求大佬解答下

阅读 637
评论
    1 个回答

    go sum() 是异步执行的,你起了两个,这个两个任务谁先执行完毕,谁后执行完毕的顺序是不确定的。

      撰写回答

      登录后参与交流、获取后续更新提醒

      相似问题
      推荐文章