waitgroup的一个疑惑点

来源:7-3 函数式编程例二

szuxxy

2021-11-12

func main() {
    wg := new(sync.WaitGroup)     
    wg.Add(2)
    go func() {
      defer wg.Done()         
      for i := 0; i < 6; i++ {
            println(i)
            if i == 3 { 
              runtime.Gosched() 
            }         
        }
    }()
    go func() {
      defer wg.Done()         
      println("Hello, World!")     
    }()
    wg.Wait() 
}

这段执行的结果为什么不是

0
1
2
3
Hello, World!
4
5

而是:

Hello, World!
0
1
2
3
4
5
写回答

1回答

ccmouse

2021-11-15

print本身是io操作,也会造成goroutine的切换。这里列出的两个结果在理论上都是有可能的,都是正确的结果。

0
0

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程