ゴランの原子パッケージは、機能func LoadUint32(addr *uint32) (val uint32)
を提供します。私はアセンブリの実装を調べました:基本的にメモリアドレスから値をロードして返します:Golang atomic.LoadUint32は必要ですか?
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
を使って直接アクセスすることの違いは何ですか?
最初はアトミックであることが保証され、2番目はアトミックではありません。 – Volker