Можно ли объединить атомарные загрузки в модели памяти C++?C++

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

Сообщение Anonymous »

Рассмотрим приведенный ниже фрагмент C++ 11. Для GCC и clang это компилируется в две (последовательно согласованные) загрузки foo. (Примечание редактора: компиляторы не оптимизируют атомарность, более подробную информацию см. в разделе «Вопросы и ответы», особенно в http://wg21.link/n4455, где обсуждаются стандарты, посвященные проблемам, которые это может создать и которые стандарт не дает программистам инструментов для обхода. Этот язык Вопросы и ответы -lawyer касаются текущего стандарта, а не того, что делают компиляторы.)

Позволяет ли модель памяти C++ компилятору объединять эти две нагрузки в одну загрузку и использовать одно и то же значение для x и y?

(Примечание редактора: над этим работает группа по стандартизации: http:// wg21.link/n4455 и http://wg21.link/p0062 Текущий стандарт на бумаге допускает нежелательное поведение.)



Я думаю, что нельзя объединить эти загружается, потому что это означает, что опрос атома больше не работает, но я не могу найти соответствующую часть в документации по модели памяти.

#include
#include

std::atomic foo;

int main(int argc, char **argv)
{
int x = foo;
int y = foo;

printf("%d %d\n", x, y);
return 0;
}


Подробнее здесь: https://stackoverflow.com/questions/331 ... mory-model
Ответить

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

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

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

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

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