我正在使用内存映射文件,并且需要在Go语言中使用原子存储。如果我是在普通分配的内存上工作,我会使用StoreUint64()函数。但是,我不确定原子操作在内存映射文件上的工作方式。
在内存映射文件上使用StoreUint64()函数安全吗?
我正在使用内存映射文件,并且需要在Go语言中使用原子存储。如果我是在普通分配的内存上工作,我会使用StoreUint64()函数。但是,我不确定原子操作在内存映射文件上的工作方式。
在内存映射文件上使用StoreUint64()函数安全吗?
这是安全的。例如,在amd64
上,它使用XCHG
指令。
func StoreUint64(addr *uint64, val uint64)
StoreUint64
atomically storesval
into*addr
.
TEXT ·StoreUint64(SB),NOSPLIT,$0-16
MOVQ addr+0(FP), BP
MOVQ val+8(FP), AX
XCHGQ AX, 0(BP)
RET
Intel 64和IA-32体系结构软件开发人员手册
XCHG
- 交换寄存器/内存与寄存器