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