Почему атомарные операции C++ имеют перегруженную версию для volatile atomic<T>
?атомная операция с летучей атомной переменной
Когда мы требуем объявить atomic<T>
как летучие и в чем разница между atomic<T>
и volatile atomic<T>
?
Почему атомарные операции C++ имеют перегруженную версию для volatile atomic<T>
?атомная операция с летучей атомной переменной
Когда мы требуем объявить atomic<T>
как летучие и в чем разница между atomic<T>
и volatile atomic<T>
?
Это то же самое, что и с любым другим типом: вам нужно volatile-qualify ваш атомный, если вы выполняете атомарные операции в регистре ввода-вывода с отображением памяти или иным образом требуете семантики нестабильных типов (которые никоим образом не связаны с атомарностью или с синхронизацией между потоками и упорядочением памяти, обеспечиваемыми атомными операциями).
Стандарт имеет это сказать о volatile
перегрузками для Атомикс (29.6.5[atomics.types.operations.req]/3
)
[Примечание: Многие операции нестабильны квалифицированные. Семантика «изменчивого как регистра устройства» не изменила в стандарте . Эта квалификация означает, что волатильность сохраняется при применении этих операций до летучих объектов. Это не означает, что операции с энергонезависимыми объектами становятся нестабильными. Таким образом, неустойчивые квалифицированные операции с энергонезависимыми объектами могут быть объединены при некоторых условиях. -end note]
* Зачем мы должны объявлять атомный как изменчивый. * Кто сказал это? –
Nawaz
@Nawaz Я думаю, что это опечатка, действительно спрашивающая «когда мы требуем», я прошу OP подтвердить это. –
@Nawaz OP спрашивает, в каких обстоятельствах мы должны заявлять об изменчивости. – this