go 一个线程写, 另外一个线程读, 为什么不能保证最终一致性?

2018-06-28 15:29:32 +08:00
 xiadada
package main

import (
    "fmt"
    "runtime"
    "sync"
    "time"
)

var lock sync.RWMutex
var i = 0

func main() {
    runtime.GOMAXPROCS(2)
    go func() {
        for {
            fmt.Println("i am here", i)
            time.Sleep(time.Second)
        }
    }()
    for {
        i += 1
    }
}

结果始终是 0, 考虑 cpu cache 一致性的话, 过一段时间就会看到变量发生了变化啊?

6301 次点击
所在节点    Go 编程语言
42 条回复
reus
2018-06-30 17:18:16 +08:00
for 循环当作 dead code 优化掉了
ms2008
2019-04-27 16:07:07 +08:00
@xiadada 能贴个 stackoverflow 的链接吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/466586

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX