как гарантировать семантику барьера памяти? - PullRequest
0 голосов
/ 22 февраля 2019

Мы используем, например, барьер памяти StoreLoad, а в x86 lock addl $0x0,(%rsp) ; представляет барьер памяти StoreLoad.Как мы знаем, Store1;StoreLoad;Load2 гарантирует, что данные Store1 сбрасываются в основную память до того, как Load2

Один поток выполняет процедуру Store1, псевдокод выглядит следующим образом:

write to local copy of variable A
lock addl $0x0,(%rsp)

Другой поток выполняет процедуру Load2,псевдокод выглядит следующим образом:

load variable A

Может ли окончательный порядок выполнения быть следующим?

write to local copy of variable A
load variable  A
lock addl $0x0,(%rsp)

Если это так, похоже, нарушена семантика барьера памяти

Большое спасибо

...