Понимание горутин

Я пытаюсь понять параллелизм в 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).

Мой вопрос :Почему программа печатает только одну строку?

Для ясности:Я не использую каналы специально для этого игрушечного примера.

41
задан 2 August 2016 в 08:27
поделиться