2015-04-24 3 views
3

Я использую файл с отображением памяти, и мне нужно использовать атомный магазин на Go. Я бы использовал StoreUint64(), если бы работал над распределенной памятью. Тем не менее, я не знаю, как работают атомарные операции над файлами с отображением памяти.Атомные операции с отображенными в памяти файлами

Можно ли использовать StoreUint64() в картографических файлах с памятью?

ответ

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 

Intel 64 и IA-32 Архитектуры Software Developer Руководство

XCHG -Обмен Регистрация/Память Регистре

Описание

обменам содержимое области назначения (первый) и исходных (вторых) операндов. Операндами могут быть два универсальных регистра или регистр и ячейка памяти. Если операнд памяти имеет значение , протокол блокировки процессора автоматически , реализованный на время операции обмена, независимо от наличия или отсутствия префикса LOCK или значения IOPL .

Смежные вопросы