在 x86_64 上 atomic.LoadInt32 实际源码就是直接取数据,对应源码如下:
```
func Load(ptr *uint32) uint32 {
return *ptr
}
```
而 WriteInt32 有所不同,其中使用了 XCHGL ,这个指令有 LOCK 指令前缀的效果,可以保证可见性。
```
TEXT ·Store(SB), NOSPLIT, $0-12
MOVQ ptr+0(FP), BX
MOVL val+8(FP), AX
XCHGL AX, 0(BX)
RET
```
因此在 x86_64 平台上不使用 atomic 包也能保证原子性,但是保证不了可见性,如果程序中对可见性没有要求,以我的认知我觉得可以不使用 atomic 包,话虽如此实际工作中并发场景中该加还是加吧,说不准认知之外还有什么别的坑呢?
btw ,多年前我对这个问题也有过一段时间疑问与探索,整理了一篇博客:
https://blog.fanscore.cn/a/34/ 可以参考一下。