为什么这个没有数据竞争(输出一直都是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.Second==1000*time.Millisecond
你的add()里只循环了
100
次5*time.Millisecond
也就是500*time.Millisecond
所以
time.Sleep(1 * time.Second)
执行完的时候add()早就执行完了笔记本是因为
fmt.Printf("execute process[%s] and val is %d\n", proc, val)
导致的,你去掉这句试试