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