Если я правильно понимаю, то трава говорит, что для Assert () в потоке 3 для достижения успеха это имеет Следовать последовательной последовательности. Таким образом, следующий код не потерпит неудачу в утверждении. < /P>
Код: Выделить всё
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 );
}
Код: Выделить всё
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 - я неправильно понимал целеустремленность слайда, или что -то не так на слайде?
Подробнее здесь: https://stackoverflow.com/questions/794 ... cy-or-will