Мне интересно, почему ни один компилятор не готов объединить последовательные записи одного и того же значения в одну атомарную переменную, например:
Код: Выделить всё
#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