拿这段代码:
func main() {
var x int
go func() {
for {
x++
}
}()
time.Sleep(time.Second)
fmt.Println("x =", x)
}
为什么最后x等于0?我知道 Go 的调度程序需要time.Sleep()调用来获取 goroutine,但为什么它不这样做呢?
提示:在 for 循环放置一个time.Sleep()或调用来runtime.Gosched()但为什么?
更新:检查相同代码的以下版本:
func main() {
var x int
go func() {
for i := 0; i < 10000; i++ {
x++
}
}()
time.Sleep(time.Second)
fmt.Println("x =", x)
}
奇怪的是,goroutine 中的代码现在被执行并且x不再是 0。编译器在这里做了任何优化吗?
慕桂英3389331
POPMUISE
相关分类