Рассмотрим приведенный ниже фрагмент 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
Можно ли объединить атомарные загрузки в модели памяти C++? ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение