In der x86-Architektur haben Speicher an demselben Speicherort eine Gesamtreihenfolge, siehe z. B. this video. Was sind die Garantien im C++ 11-Speichermodell?Werden zwei entspannte Schreibvorgänge an derselben Stelle in verschiedenen Threads immer in der gleichen Reihenfolge von anderen Threads angezeigt?
Genauer gesagt, in
-- 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);
würde das Ergebnis r1==1, r2==2, r3==2, r4==1
(auf einer anderen Architektur als x86) erlaubt sein? Was wäre, wenn ich alle memory_order
durch std::memory_order_relaxed
ersetzen würde?
Können Sie mir helfen, p18 zu verstehen? Ist "Wertberechnung" ein Synonym für "Load-from-Atomic" und "Side-Effect" Synonym für "Store-to-Atomic"? –
@ TobiasBrüll Die Last ist eine Wertberechnung; Der Laden ist ein Nebeneffekt. –
Welche anderen Arten von Wertberechnungen gibt es? Und welche anderen Nebenwirkungen? –