【问题标题】:Atomic operations on memory mapped files内存映射文件的原子操作
【发布时间】:2015-04-24 22:48:16
【问题描述】:

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

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

【问题讨论】:

    标签: multithreading go thread-safety atomic


    【解决方案1】:

    很安全。例如,在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 前缀或值的存在与否 IOPL。

    【讨论】:

      猜你喜欢
      • 2011-04-15
      • 1970-01-01
      • 2014-06-05
      • 2016-02-23
      • 1970-01-01
      • 2015-09-29
      • 2017-09-29
      • 2014-07-13
      • 2010-11-01
      相关资源
      最近更新 更多