Я пытаюсь понять concurrency в 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
).
Мой вопрос: почему программа печатает только одну строку?
Просто для того, чтобы быть ясным: я не использую каналы для этого примера игрушек.