Go的原子包提供了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指针(addr)x,调用atomic.LoadUint32(x)和使用*x直接访问它之间有什么区别?

最佳答案


在您的上下文中就是这种情况,但是在不同的机器体系结构上可能会有所不同,在该体系结构中,应将 atomicity 实现为discussed here
go issue 8739中所述

(*为“intrinsify”,如issue 4947所示)
如我的第一个链接所述:

关于go - atomic.LoadUint32是否必要?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46556857/

10-11 08:36