< /p>
Wenn ich dies richtig verstehe, muss Herb sagen, dass dies für die Behauptung in Thread 3, um nicht Feuer zu feiern, der sequentiellen Konsistenz folgen muss. Der folgende Code feuert also die Assert nicht ab. < /P>
Code: Select all
int g{0}; // normal int
std::atomic x{0}, y{0}; // atomics
void thread1() {
g = 1;
x.store(1, std::memory_order_seq_cst);
}
void thread2() {
if(x.load(std::memory_order_seq_cst) == 1)
y.store(1, std::memory_order_seq_cst);
}
void thread3() {
if(y.load(std::memory_order_seq_cst) == 1)
assert( g == 1 );
}
Code: Select all
int g{0}; // normal int
std::atomic x{0}, y{0}; // atomics
void thread1() {
g = 1; // A
x.store(1, std::memory_order_release);
}
void thread2() {
if(x.load(std::memory_order_acquire) == 1)
y.store(1, std::memory_order_release);
}
void thread3() {
if(y.load(std::memory_order_acquire) == 1)
assert( g == 1 ); // B
}
q2 geschrieben - verstehe ich den Anschluss an die Folie falsch oder etwas stimmt auf der Folie nicht?>