golang cpu缓存一致性问题

json7 · · 1165 次点击
更多评论
线程的变量是复制一份的。不是指针传递,所以一直是0, 这个是局部变量。其他线程不可见
#1
jan-bar
想要拥有,必定付出。
```go package main import ( "fmt" "sync" "time" ) func main() { var ( i int wg sync.WaitGroup ) wg.Add(2) go func() { for { i++ time.Sleep(time.Nanosecond) } }() go func() { for { fmt.Println(i) } }() wg.Wait() } 按照上面给第一个协程加一个延时就没问题,我也没有深入了解原因。 但我知道肯定是多个协程对同一个变量操作的问题。但实际编码时需要对这些变量 加锁,所以这段代码没有啥实际意义,如果你敢把这种不加锁保护变量的代码写到生产环境 肯定是会被骂惨了。 ```
#2