关于匿名函数使用共享变量的问题

gpfly · · 1350 次点击
上面的截图不好看代码,我发这里,你可以自己研究一下 ```go func testg1() { i := int64(0) go func() { for true { //隔一秒打印i time.Sleep(1000000000) fmt.Println(i) // 0 // runtime.GC() // forever block } }() for true { i++ } } func testg2() { i := int64(0) go func() { for true { //隔一秒打印i time.Sleep(1000000000) fmt.Println(atomic.LoadInt64(&i)) // 778880009 } }() for true { atomic.AddInt64(&i, 1) } } func testg4() { i := int64(0) go func() { for true { i++ } }() for true { //隔一秒打印i time.Sleep(1000000000) fmt.Println(i) // 0 // runtime.GC() // forever block } } func testg5() { i := int64(0) go func() { for true { //隔一秒打印i time.Sleep(1000000000) fmt.Println(i) // xxxx // runtime.GC() // forever block } }() for true { f := func() { i++ y := int64(0) y++ _ = y * i } f() } } ``` 生成汇编代码,用 go tool compile -S go文件
#4
更多评论
这个问题在我电脑上,两种情况打印出的结果都是 0。 环境:go version go1.12 linux/amd64
#1
真奇怪,我记得上午我测试的时结果是不一样的。然后刚才我又测试了一下,怎么结果都是0了?题主确定结果不一样?
#2