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/