go学习笔记第四版本第67页的代码和我执行的不一致?求指导
69 wg := new(sync.WaitGroup)
70 wg.Add(2)
71 go func() {
72 defer wg.Done()
73 for i := 0; i < 6; i++ {
74 println(i)
75 if i == 3 {
76 runtime.Gosched()
77 }
78 }
79 }()
80 go func() {
81 defer wg.Done()
82 println("Hello, World!")
83 }()
84 wg.Wait()
实际输出:
Hello, World!
0
1
2
3
4
5
但是书上67页写的是
$ go run main.go
0
1
2
3
Hello, World!
4
5
,求大侠解释
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
版本问题,GO1.5以后默认开启多核了,1.5以前默认是单核的(默认只启动一个线程),并且可能改变了调度方式,现在你手动设置只开启一个线程:runtime.GOMAXPROCS(1) 也和1.4的运行结果不一样
以下是1.5(左)和1.4(右)的运行结果
谁会去翻那本书啊,建议把那页的代码拍上来看看才知道有区别。
你查一下 runtime.Gosched() 这个函数做了什么
看看你的语言版本 ,1.4默认单核运行,之后才是多核多线程
这段代码中两个输出信息的 goroutine 之间没有做任何同步,理论上以任何顺序输出都是有可能的啊,不应对输出的结果做出期望。