I'm trying to understand concurrency in Go. In particular, I wrote this thread-unsafe program:
package main
import "fmt"
var x = 1
func inc_x() { //test
for {
x += 1
}
}
func main() {
go inc_x()
for {
fmt.Println(x)
}
}
I recognize that I should be using channels to prevent race conditions with x
, but that's not the point here. The program prints 1
and then seems to loop forever (without printing anything more). I would expect it to print an infinite list of numbers, possibly skipping some and repeating others due to the race condition (or worse -- printing the number while it is being updated in inc_x
).
My question is: Why does the program only print one line?
Just to be clear: I'm not using channels on purpose for this toy example.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…