关于go的sync.WaitGroup里的goroutine的执行顺序的疑惑,请大神指点,谢谢!
简要代码如下:
package main
import (
"fmt"
"sync"
)
var wg sync.WaitGroup
func main() {
wg.Add(2)
go fun1()
go fun2()
fmt.Println("main进入阻塞状态,等待wg中的子goroutine结束。")
wg.Wait()
fmt.Println("main 解除阻塞")
}
func fun1() {
for i := 1; i <= 20; i++ {
fmt.Println("fun1 i:", i)
}
wg.Done()
}
func fun2() {
//defer wg.Done()
for j := 1; j <= 20; j++ {
fmt.Println("\tfun2 j:", j)
}
wg.Done()
}
本人是 go 新手,这是在按网上的教程写的测试示例,我有点疑惑的是这段代码执行后为什么一直是先输出 fun2 方法里的内容,偶尔也会加载着 fun1 方法里的内容,这个大致能理解,但是不解的是为什么不会先输出 fun1 方法里的内容呢?
推荐文章: