如雨随行2020
2021-09-15 01:30
采纳率: 100%
浏览 28

为什么这个没有数据竞争(输出一直都是200)

下面代码,理论上 val 的最终结果应该是 100~200 之间的某个值,在笔记本电脑上运行确实如此,val 最终 118。但是,当我在台式机上运行时,结果却一直都是 200,谁能帮我解答一下吗?


var val = 0

func main() {
    num := runtime.NumCPU()
    fmt.Println("使用cpu数量", num)
    go add("A")
    go add("B")
    time.Sleep(1 * time.Second)
    fmt.Println("val的最终结果", val)
}

func add(proc string) {
    for i := 0; i < 100; i++ {
        val++
        fmt.Printf("execute process[%s] and val is %d\n", proc, val)
        time.Sleep(5 * time.Millisecond)
    }
}
  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • 於黾 2021-09-15 08:38
    已采纳
    time.Sleep(1 * time.Second)
    

    你把这个1改成10,再看笔记本上还是118吗
    我猜你sleep时间太短,线程还没执行完你就打印了结果。

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题