Будут ли два атомного писателя в разных местах в разных темах всегда видны в одном и том же порядке другими потоками?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Будут ли два атомного писателя в разных местах в разных темах всегда видны в одном и том же порядке другими потоками?

Сообщение Anonymous »

Аналогично моему предыдущему вопросу, рассмотрите этот код < /p>

Код: Выделить всё

-- Initially --
std::atomic x{0};
std::atomic y{0};

-- Thread 1 --
x.store(1, std::memory_order_release);

-- Thread 2 --
y.store(2, std::memory_order_release);

-- Thread 3 --
int r1 = x.load(std::memory_order_acquire);   // x first
int r2 = y.load(std::memory_order_acquire);

-- Thread 4 --
int r3 = y.load(std::memory_order_acquire);   // y first
int r4 = x.load(std::memory_order_acquire);
- это странный результат r1 == 1, r2 == 0 и r3 == 2, r4 == 0 В этом случае под моделью памяти C ++ 11? Что если бы я заменил все std :: memory_order_acq_rel < /code> by std :: memory_order_relaxed < /code>? Вопрос:

Мы все согласны с тем, что с помощью std :: memory_order_seq_cst странный результат не будет разрешен в C ++ 11. Теперь Херб Саттер сказал в своем знаменитом атомке -weapons Talk @ 42:30, что std :: memory_order_seq_cst похоже на std :: memory_order_acq_rel , но std :: memory_acquire -lods может не перемещаться перед STD :: memory_rode_rode_rode_rode_rodes Я не вижу, как это дополнительное ограничение в приведенном выше примере предотвратит странный результат . Кто -нибудь может объяснить?

Подробнее здесь: https://stackoverflow.com/questions/278 ... ays-be-see
Ответить

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

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

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

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

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