J'essaie de comprendre la concurrence en Go. En particulier, j'ai écrit ce programme non sécurisé par les threads :
package main
import "fmt"
var x = 1
func inc_x() { //test
for {
x += 1
}
}
func main() {
go inc_x()
for {
fmt.Println(x)
}
}
Je reconnais que je devrais utiliser des canaux pour empêcher les conditions de course avec x
mais ce n'est pas le sujet ici. Le programme imprime 1
et semble ensuite tourner en boucle à l'infini (sans rien imprimer de plus). Je m'attendrais à ce qu'il imprime une liste infinie de nombres, en sautant peut-être certains et en répétant d'autres à cause de la condition de course (ou pire -- en imprimant le nombre pendant qu'il est mis à jour dans le fichier de configuration de l'ordinateur). inc_x
).
Ma question est la suivante : pourquoi le programme n'imprime-t-il qu'une seule ligne ?
Soyons clairs : je n'utilise pas les canaux à dessein pour cet exemple de jouet.