Почему компиляторы не объединяют избыточные записи std::atomic?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему компиляторы не объединяют избыточные записи std::atomic?

Сообщение Anonymous »

Мне интересно, почему ни один компилятор не готов объединить последовательные записи одного и того же значения в одну атомарную переменную, например:

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

#include 
std::atomic y(0);
void f() {
auto order = std::memory_order_relaxed;
y.store(1, order);
y.store(1, order);
y.store(1, order);
}
Каждый компилятор, который я пробовал, выдаст указанную выше запись три раза. Какой законный, свободный от расы наблюдатель мог бы увидеть разницу между приведенным выше кодом и оптимизированной версией с помощью одной записи (т. е. не применяется ли правило «как если бы»)?

Если переменная была изменчивой, то очевидно, что никакая оптимизация не применима. Что мешает этому в моем случае?

Вот код в проводнике компилятора.

Подробнее здесь: https://stackoverflow.com/questions/459 ... mic-writes
Ответить

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

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

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

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

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