Рассмотрим приведенный ниже фрагмент С++ 11. Для GCC и clang это компилируется в две (последовательно согласованные) нагрузки foo. Модель модели С++ позволяет компилятору объединить эти две нагрузки в одну нагрузку и использовать одно и то же значение для x и y?
Я думаю, что он не может объединить эти нагрузки, потому что это означает, что опрос атома больше не работает, но я не могу найти соответствующую часть в документации модели памяти.
#include <atomic>
#include <cstdio>
std::atomic<int> foo;
int main(int argc, char **argv)
{
int x = foo;
int y = foo;
printf("%d %d\n", x, y);
return 0;
}