【发布时间】:2017-10-04 04:07:58
【问题描述】:
Go 的 atomic 包提供函数 func LoadUint32(addr *uint32) (val uint32)。我查看了程序集实现:
TEXT ·LoadUint32(SB),NOSPLIT,$0-12
MOVQ addr+0(FP), AX
MOVL 0(AX), AX
MOVL AX, val+8(FP)
RET
它基本上从内存地址加载值并返回它。
我想知道我们是否有一个uint32指针(地址)x,调用atomic.LoadUint32(x)和使用*x直接访问它有什么区别?
【问题讨论】:
-
第一个保证是原子的,第二个不是。