内存映射文件上的原子操作

3

我正在使用内存映射文件,并且需要在Go语言中使用原子存储。如果我是在普通分配的内存上工作,我会使用StoreUint64()函数。但是,我不确定原子操作在内存映射文件上的工作方式。

在内存映射文件上使用StoreUint64()函数安全吗?

1个回答

3

这是安全的。例如,在amd64上,它使用XCHG指令。

func StoreUint64

    func StoreUint64(addr *uint64, val uint64)

StoreUint64 atomically stores val into *addr.

src/sync/atomic/asm_amd64.s;

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 - 交换寄存器/内存与寄存器
描述:
交换目的操作数(第一个)和源操作数(第二个)的内容。这些操作数可以是两个通用寄存器或一个寄存器和一个内存位置。如果引用了一个内存操作数,则处理器的锁定协议在交换操作期间会自动实现,无论有没有LOCK前缀或IOPL的值如何。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接