内存映射文件的原子操作

时间:2015-04-24 22:48:17

标签: multithreading go thread-safety atomic

我正在使用内存映射文件,我需要在Go上使用原子商店。如果我正在处理定期分配的内存,我会使用StoreUint64()。但是,我不确定原子操作如何处理内存映射文件。

在内存映射文件上使用StoreUint64()是否安全?

1 个答案:

答案 0 :(得分:3)

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

  

func StoreUint64

    func StoreUint64(addr *uint64, val uint64)
     

StoreUint64自原地将val存储到*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
  

英特尔64和IA-32架构软件开发人员手册

     

XCHG - 带寄存器的交换寄存器/存储器

     

说明

     

交换目的地的内容(第一个)和   源(第二)操作数。操作数可以是两个通用的   寄存器或寄存器和存储器位置。如果是内存操作数   引用时,处理器的锁定协议是自动的   无论如何,在交换操作期间实施   是否存在LOCK前缀或者是否存在LOCK前缀   IOPL。