为什么主要的goroutine总是第二个被调用

时间:2017-06-20 15:21:48

标签: go concurrency goroutine

package main
import (
  "sync"
  "time"
  )
func main() {
  var wg sync.WaitGroup

  wg.Add(1)

  go func() {         //A
    wg.Wait()
    println("wait exit")
  }()

  go func() {
    time.Sleep(time.Second)
    wg.Done()
  }()

  wg.Wait()
  println("main exit")
}

结果:

wait exit
main exit

为什么主要的goroutine首先执行println("主要退出"),主线程死了然后丢弃一个goroutine? 它像结果一样保持打印

1 个答案:

答案 0 :(得分:2)

可能。

语言规范中没有任何内容表明您的等待退出"应该在"主要退出"之前或之后执行。

如果你运行程序足够多次,有时可能会出现#34;主要退出"将首先运行。但也许不是。结果未定义,并且取决于运行时状态和实现。因此,这些结果甚至可能会在Go版本之间发生变化。