Естественное выравнивание + изменчивый = атомарный в C ++ 11? - PullRequest
0 голосов
/ 22 мая 2018

1) Является ли следующее объявление естественно выровненного указателя:

alignas(sizeof(void *)) volatile void * p;

эквивалентно

std::atomic<void *> 

в C ++ 11?

2) Говоритьточнее, правильно ли предположить, что указатель этого типа будет работать так же, как std :: atomic в C ++ 11?

1 Ответ

0 голосов
/ 22 мая 2018

Нет, volatile не гарантирует, что расположение будет записываться или считываться атомарно, только компилятор не может оптимизировать многократное чтение и запись.

На некоторых архитектурах процессор будет атомарно читать или записыватьесли выровнены правильно, но это не универсально или даже не гарантируется семейством процессоров.Там, где это возможно, внутренняя реализация atomic будет использовать архитектурные особенности и атомарные модификаторы команд, так почему же не использует атомарный, если вы имеете в виду атомарный?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...