如雨随行2020 2021-09-15 01:30 采纳率: 100%
浏览 31
已结题

为什么这个没有数据竞争(输出一直都是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时间太短,线程还没执行完你就打印了结果。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月24日
  • 已采纳回答 9月16日
  • 创建了问题 9月15日