为了账号安全,请及时绑定邮箱和手机立即绑定

执行闭包 goroutine 未能达到预期的结果

执行闭包 goroutine 未能达到预期的结果

Go
智慧大石 2022-05-23 15:01:38
func main() {    var number int = 0    go func() {        for {            number++            //time.Sleep(time.Nanosecond)        }    }()    for {        fmt.Println(number)        time.Sleep(time.Second)    }}number的打印总是0,但是在for循环中加上time.Sleep(time.Nanosecond)语句后,value的打印就正常了。为什么?
查看完整描述

1 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

你有一个数据竞赛。阅读 Go 内存模型:

https://golang.org/ref/mem

如果在 goroutine 之间没有使用通道或锁进行显式同步,那么就没有发生之前的关系,也不能保证一个 goroutine 会看到另一个 goroutine 的效果。如果您使用的是 Go v1.13 或更早版本,那么忙循环将不会屈服于其他 goroutine。


查看完整回答
反对 回复 2022-05-23
  • 1 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信