为什么这个没有数据竞争(输出一直都是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)
    }
}
time.Sleep(1 * time.Second)

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