Достаточно ли этого перевода.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Достаточно ли этого перевода.

Сообщение Anonymous »

Этот Snip взят из разговора о атомном оружии Герба Саттера со стр. net/yl8yyu0w.png "/>
Если я правильно понимаю, то трава говорит, что для 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
}
q1-not // a simply-happens-fore // b Убедитесь, что утверждение действителен, поскольку Никакая другая ветка не записывается в g ?
Q2 - я неправильно понимал целеустремленность слайда, или что -то не так на слайде?

Подробнее здесь: https://stackoverflow.com/questions/794 ... cy-or-will
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»