我是Go语言的新手,所以如果我的问题非常基本,请原谅。我写了一个非常简单的代码:
func main(){
var count int // Default 0
cptr := &count
go incr(cptr)
time.Sleep(100)
fmt.Println(*cptr)
}
// Increments the value of count through pointer var
func incr(cptr *int) {
for i := 0; i < 1000; i++ {
go func() {
fmt.Println(*cptr)
*cptr = *cptr + 1
}()
}
}
count 的值应该随着循环运行的次数加一。考虑以下情况:
循环运行 100 次--> 计数值为 100(这是正确的,因为循环运行 100 次)。
循环运行 >510 次 --> 计数值是 508 或 510。即使它是 100000,也会发生这种情况。
我在 8 核处理器机器上运行它。