разве операции с простымит типами(bool, int) не атомарные изначально?
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Здравствуйте, Barbar1an, Вы писали:
B>разве операции с простымит типами(bool, int) не атомарные изначально?
Не гарантировано. Даже если и атомарно (по факту таки да, атомарно):
* Нет memory_order, всегда как бы memory_order_relaxed, даже чутка хуже (некоторые перестановки компилятором возможны, которые memory_order_relaxed запрещает)
* Нет read-modify_write операций. Т.е. i = 1 (store) или return i (load) -- атомарны, i++ уже нет.
Здравствуйте, Barbar1an, Вы писали:
B>разве операции с простымит типами(bool, int) не атомарные изначально?
Нет. Более того, компилятор может соптимизировать переменную так, что её в исполняемом коде вообще не будет. Поэтому в старом коде можно встретить volatile вместо atomic, но даже для volatile при наличии атомарности не гарантируется (не гарантировалась ?) ожидаемая работа, когда есть исполнение на двух или более ядрах.
Здравствуйте, Alexander G, Вы писали:
AG>Здравствуйте, Barbar1an, Вы писали:
B>>разве операции с простымит типами(bool, int) не атомарные изначально?
AG>Не гарантировано. Даже если и атомарно (по факту таки да, атомарно): AG>* Нет memory_order, всегда как бы memory_order_relaxed, даже чутка хуже (некоторые перестановки компилятором возможны, которые memory_order_relaxed запрещает) AG>* Нет read-modify_write операций. Т.е. i = 1 (store) или return i (load) -- атомарны, i++ уже нет.
ааа, ммммммм,понял, спасибо посоны)
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Здравствуйте, B0FEE664, Вы писали: BFE>Нет. Более того, компилятор может соптимизировать переменную так, что её в исполняемом коде вообще не будет. Поэтому в старом коде можно встретить volatile вместо atomic
Compilers do optimize atomics, memory accesses around atomics, and utilize architecture-specific knowledge. This paper illustrates a few such optimizations, and discusses their implications.
AG>False.
AG>Compilers do optimize atomics, memory accesses around atomics, and utilize architecture-specific knowledge. This paper illustrates a few such optimizations, and discusses their implications.
Это не правильный спойлер. Вот правильный:
Atomic operations are unsuitable to express that memory locations can be externally modified. Indeed, volatile (or volatile atomic) should be used in these circumstances.
Здравствуйте, B0FEE664, Вы писали: BFE>Это не правильный спойлер. Вот правильный: BFE>
BFE>Atomic operations are unsuitable to express that memory locations can be externally modified. Indeed, volatile (or volatile atomic) should be used in these circumstances.
Ну, мой спойлер больше на случай чтения только заголовка без перехода по ссылке, а не про то, что с этим делать.