网站地图    收藏   

主页 > 采坑 > 服务端采坑 > goLang采坑 >

golang中不同Goroutine之间不满足顺序一致性内存模型

来源:未知    时间:2021-05-03 17:46 作者:小飞侠 阅读:

[导读] 因为在不同的Goroutine, main函数可能无法观测到done的状态变化, 那么for循环会陷入死循环: varmsgstringvardonebool=falsefuncmain(){runtime.GOMAXPROCS(1)gofunc(){msg=hello,worlddone=true}()for{ifdone{println(msg)brea...

因为在不同的Goroutine, main函数可能无法观测到done的状态变化, 那么for循环会陷入死循环:

var msg stringvar done bool = falsefunc main() {
    runtime.GOMAXPROCS(1)

    go func() {
        msg = "hello, world"
        done = true
    }()

    for {
        if done {
            println(msg)
            break
        }
    }}

解决的办法是用显示同步:

var msg stringvar done = make(chan bool)func main() {
    runtime.GOMAXPROCS(1)

    go func() {
        msg = "hello, world"
        done <- true
    }()

    <-done    println(msg)}


自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论