我试图理解 Go 中的并发性。特别是,我编写了这个线程不安全的程序:
package main
import "fmt"
var x = 1
func inc_x() { //test
for {
x += 1
}
}
func main() {
go inc_x()
for {
fmt.Println(x)
}
}
我认识到我应该使用通道来防止竞争条件x
,但这不是重点。程序打印1
然后似乎永远循环(不再打印任何内容)。我希望它打印一个无限的数字列表,可能会由于竞争条件而跳过一些并重复其他的(或者更糟——在更新时打印数字inc_x
)。
我的问题是:为什么程序只打印一行?
只是要明确一点:对于这个玩具示例,我不是故意使用频道。