Мне интересно, почему компиляторы не готовы объединить последовательные записи одного и того же значения с одной атомной переменной, например:
#include <atomic>
std::atomic<int> y(0);
void f() {
auto order = std::memory_order_relaxed;
y.store(1, order);
y.store(1, order);
y.store(1, order);
}
Каждый компилятор, который я пробовал, выдает вышеприведенную запись три раза. Какой законный, независимый от гонки наблюдатель мог видеть разницу между приведенным выше кодом и оптимизированной версией с одной записью (т.е. Не применяется правило "как-если" )?
Если переменная была изменчивой, то, очевидно, оптимизация не применима. Что мешает этому в моем случае?
Вот код в проводник компилятора.