Estoy tratando de comprender la concurrencia en Go. En particular, escribí este programa hilos inseguros:Comprensión de las rutinas
package main
import "fmt"
var x = 1
func inc_x() { //test
for {
x += 1
}
}
func main() {
go inc_x()
for {
fmt.Println(x)
}
}
Reconozco que debo utilizar los canales para evitar las condiciones de carrera con x
, pero ese no es el punto aquí. El programa imprime 1
y luego parece que se repite para siempre (sin imprimir nada más). Esperaría que imprima una lista infinita de números, posiblemente omitiendo algunos y repitiendo otros debido a la condición de carrera (o peor, imprimiendo el número mientras se actualiza en inc_x
).
Mi pregunta es: ¿Por qué el programa solo imprime una línea?
Para que quede claro: no estoy usando canales a propósito para este ejemplo de juguete.
Acabo de pensar que mencionaría que desde Go 1.2, el programador puede invocarse periódicamente en la entrada de la función. Resolvería este caso, no creo, pero ayuda cuando tienes un bucle cerrado que llama a una función no en línea. –