2013-10-05 10 views
5

Dlaczego operacje atomowe C++ mają przeciążoną wersję dla zmiennej atomic<T>?operacja atomowa z lotną zmienną atomową

Kiedy jest wymagane, zadeklaruj atomic<T> jako zmienną i jaka jest różnica między atomic<T> a volatile atomic<T>?

+2

* Dlaczego musimy zadeklarować atomową jako zmienną ... * Kto to powiedział? – Nawaz

+2

@Nawaz Myślę, że to literówka naprawdę pytająca "kiedy jesteśmy potrzebni", proszę OP, aby to potwierdzić. –

+0

@Nawaz OP pyta, w jakich okolicznościach musimy ogłosić niestabilność. – this

Odpowiedz

3

Jest taki sam, jak w każdym innym rodzaju: musisz ulotnić się - zakwalifikować atomową, jeśli wykonujesz operacje atomowe na odwzorowanym w pamięci rejestrze we/wy lub w inny sposób potrzebujesz semantyki typów o zmiennych lotach (które są niezwiązane w żaden sposób z atomizacją lub synchronizacją między wątkami i kolejnością pamięci zapewnianą przez operacje atomowe).

Norma ma do powiedzenia o volatile przeciążeń dla atomistyki (29.6.5[atomics.types.operations.req]/3)

[Uwaga: Wiele operacji są lotne kwalifikacjach. Semantyka "volatile as device register" nie zmieniła się w standardzie . Ta kwalifikacja oznacza, że ​​zmienność jest zachowywana podczas stosowania tych operacji w przypadku obiektów niestabilnych. Nie oznacza to, że operacje na obiektach nielotnych stają się niestabilne. Tak więc, zmienne operacje na nielotnych obiektach mogą zostać scalone w pewnych warunkach. -end note]