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