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 内存模型:
如果在 goroutine 之间没有使用通道或锁进行显式同步,那么就没有发生之前的关系,也不能保证一个 goroutine 会看到另一个 goroutine 的效果。如果您使用的是 Go v1.13 或更早版本,那么忙循环将不会屈服于其他 goroutine。
- 1 回答
- 0 关注
- 122 浏览
添加回答
举报
0/150
提交
取消