我正在学习 Golang 中与并发相关的问题。我写了一些代码:
package main
import (
"fmt"
"time"
)
func incr(num *int) {
*num = *num + 1
}
func main() {
var a = 0
for i := 0; i < 50; i++ {
go incr(&a)
}
incr(&a)
time.Sleep(1 * time.Second)
fmt.Println(a)
}
这段代码的结果是:51
在这段代码中,我声明了a在 50 个正在运行的 goroutine 中增加的变量。根据我的阅读和理解,这段代码应该会失败,因为多个 goroutine 正在写入相同的内存地址。在这种情况下,我应该添加sync.Mutex锁来解决这个问题。
代码在操场上可用:https ://play.golang.org/p/Tba9pfpxaHY
您能解释一下这个程序中到底发生了什么吗?
心有法竹
相关分类