2013-10-05 3 views
5

Почему атомарные операции C++ имеют перегруженную версию для volatile atomic<T>?атомная операция с летучей атомной переменной

Когда мы требуем объявить atomic<T> как летучие и в чем разница между atomic<T> и volatile atomic<T>?

+2

* Зачем мы должны объявлять атомный как изменчивый. * Кто сказал это? – Nawaz

+2

@Nawaz Я думаю, что это опечатка, действительно спрашивающая «когда мы требуем», я прошу OP подтвердить это. –

+0

@Nawaz OP спрашивает, в каких обстоятельствах мы должны заявлять об изменчивости. – this

ответ

3

Это то же самое, что и с любым другим типом: вам нужно volatile-qualify ваш атомный, если вы выполняете атомарные операции в регистре ввода-вывода с отображением памяти или иным образом требуете семантики нестабильных типов (которые никоим образом не связаны с атомарностью или с синхронизацией между потоками и упорядочением памяти, обеспечиваемыми атомными операциями).

Стандарт имеет это сказать о volatile перегрузками для Атомикс (29.6.5[atomics.types.operations.req]/3)

[Примечание: Многие операции нестабильны квалифицированные. Семантика «изменчивого как регистра устройства» не изменила в стандарте . Эта квалификация означает, что волатильность сохраняется при применении этих операций до летучих объектов. Это не означает, что операции с энергонезависимыми объектами становятся нестабильными. Таким образом, неустойчивые квалифицированные операции с энергонезависимыми объектами могут быть объединены при некоторых условиях. -end note]

Смежные вопросы