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

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的打印就正常了。为什么?


智慧大石
浏览 123回答 1
1回答

一只名叫tom的猫

你有一个数据竞赛。阅读 Go 内存模型:https://golang.org/ref/mem如果在 goroutine 之间没有使用通道或锁进行显式同步,那么就没有发生之前的关系,也不能保证一个 goroutine 会看到另一个 goroutine 的效果。如果您使用的是 Go v1.13 或更早版本,那么忙循环将不会屈服于其他 goroutine。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go