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
)。
私の質問は: プログラムが 1 行しか出力しないのはなぜですか?
明確にするために: このおもちゃの例では、意図的にチャネルを使用していません。