W architekturze x86 zapasy w tej samej lokalizacji pamięci mają całkowitą kolejność, np. Zobacz this video. Jakie są gwarancje w modelu pamięci C++ 11?Czy dwa luźne zapisy do tej samej lokalizacji w różnych wątkach będą zawsze widoczne w tej samej kolejności przez inne wątki?
Dokładniej, w
-- Initially --
std::atomic<int> x{0};
-- Thread 1 --
x.store(1, std::memory_order_release);
-- Thread 2 --
x.store(2, std::memory_order_release);
-- Thread 3 --
int r1 = x.load(std::memory_order_acquire);
int r2 = x.load(std::memory_order_acquire);
-- Thread 4 --
int r3 = x.load(std::memory_order_acquire);
int r4 = x.load(std::memory_order_acquire);
będzie wynik r1==1, r2==2, r3==2, r4==1
wolno (na jakiejś architekturze innej niż x86)? Co się stanie, jeśli zastąpię wszystkie memory_order
przez std::memory_order_relaxed
?
Czy możesz mi pomóc zrozumieć p18? Czy synonim "obliczania wartości" jest synonimem synonimu load-from-atomic i 'side effect' z store-to-atomic? –
@ TobiasBrüll Obciążenie to obliczenie wartości; Sklep jest efektem ubocznym. –
Jakie inne rodzaje obliczeń wartości istnieją? A jakie inne efekty uboczne? –