我正在使用内存映射文件,我需要在Go上使用原子商店。如果我正在处理定期分配的内存,我会使用StoreUint64()。但是,我不确定原子操作如何处理内存映射文件。
在内存映射文件上使用StoreUint64()是否安全?
答案 0 :(得分:3)
这很安全。例如,在amd64
上,它使用XCHG
指令。
func StoreUint64(addr *uint64, val uint64)
StoreUint64
自原地将val
存储到*addr
。
TEXT ·StoreUint64(SB),NOSPLIT,$0-16
MOVQ addr+0(FP), BP
MOVQ val+8(FP), AX
XCHGQ AX, 0(BP)
RET
英特尔64和IA-32架构软件开发人员手册
XCHG
- 带寄存器的交换寄存器/存储器说明
交换目的地的内容(第一个)和 源(第二)操作数。操作数可以是两个通用的 寄存器或寄存器和存储器位置。如果是内存操作数 引用时,处理器的锁定协议是自动的 无论如何,在交换操作期间实施 是否存在LOCK前缀或者是否存在LOCK前缀 IOPL。