为什么此代码未定义行为? 主程序包 导入“时间” 输入“fmt” var i int=0 func loopInc(){ 为了{ 我++ } } func main(){ go loopInc()
这一切都在报告中解释过了 在本例中,递增为什么此代码未定义行为? 主程序包 导入“时间” 输入“fmt” var i int=0 func loopInc(){ 为了{ 我++ } } func main(){ go loopInc(),go,undefined-behavior,Go,Undefined Behavior,这一切都在报告中解释过了 在本例中,递增i和打印i之间不存在“发生在之前”关系。因为不存在“发生在之前”关系,主goroutine可能会也可能不会看到对i的更改 允许编译器对i++进行优化,因为不能保证对i的更改会被观察到。这在中有详细说明 在本例中,递增i和打印i之间不存在“发生在之前”关系。因为不存在“发生在之前”关系,主goroutine可能会也可能不会看到对i的更改 编译器可以优化i++,因为不能保证对i的更改会被观察到 package main import "time" impor
i
和打印i
之间不存在“发生在之前”关系。因为不存在“发生在之前”关系,主goroutine可能会也可能不会看到对i
的更改
允许编译器对i++
进行优化,因为不能保证对i
的更改会被观察到。这在中有详细说明
在本例中,递增i
和打印i
之间不存在“发生在之前”关系。因为不存在“发生在之前”关系,主goroutine可能会也可能不会看到对i
的更改
编译器可以优化i++
,因为不能保证对i
的更改会被观察到
package main
import "time"
import "fmt"
var i int = 0
func loopInc() {
for {
i++
}
}
func main() {
go loopInc()
<-time.After(1 * time.Millisecond)
fmt.Println(i)
}