我正在阅读preshing的博客Memory Reordering Caught in the Act,并通过他的示例代码重现内存重新排序
然后我想知道我是否可以通过Go重现内存重新排序,所以我在go中编写了示例代码,但是在Go中没有显示内存重新排序.
我写信是为了分享一些调查结果.
你能帮忙解释为什么Go无法进行内存重新排序吗?谢谢.
Go中的示例代码:
package main
import (
"fmt"
"math/rand"
)
var x, y, r1, r2 int
var detected = 0
func randWait() {
for rand.Intn(8) != 0 {
}
}
func main() {
beginSig1 := make(chan bool, 1)
beginSig2 := make(chan bool, 1)
endSig1 := make(chan bool, 1)
endSig2 := make(chan bool, 1)
go func() {
for {
<-beginSig1
randWait()
x = 1
r1 = y
endSig1 <- true …Run Code Online (Sandbox Code Playgroud)