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>
?
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>
?
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]
* Dlaczego musimy zadeklarować atomową jako zmienną ... * Kto to powiedział? –
Nawaz
@Nawaz Myślę, że to literówka naprawdę pytająca "kiedy jesteśmy potrzebni", proszę OP, aby to potwierdzić. –
@Nawaz OP pyta, w jakich okolicznościach musimy ogłosić niestabilność. – this