内存映射文件的原子操作
Posted
技术标签:
【中文标题】内存映射文件的原子操作【英文标题】:Atomic operations on memory mapped files 【发布时间】:2015-04-24 22:48:16 【问题描述】:我正在使用内存映射文件,我需要在 Go 上使用原子存储。如果我正在处理定期分配的内存,我会使用 StoreUint64()。但是,我不确定原子操作如何对内存映射文件起作用。
在内存映射文件上使用 StoreUint64() 是否安全?
【问题讨论】:
【参考方案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。
【讨论】:
以上是关于内存映射文件的原子操作的主要内容,如果未能解决你的问题,请参考以下文章