Описание тега atomic
Операция является атомарной, если она неделима - либо все эффекты операции видны, либо их нет.
В базах данных атомарность транзакций является одной из основных гарантий - это буква A в ACID. Это позволяет гарантировать, что данные переходят из одного согласованного состояния в другое, даже если обновления охватывают более одной таблицы.
В многопоточных программах атомарность важна для построения низкоуровневых средств, поскольку она гарантирует, что код, выполняющийся в других потоках, видит либо значение до изменения, либо значение после него, а не какое-то промежуточное значение. Блокировки реализованы в виде атомарных операций, но их также можно использовать непосредственно для создания алгоритмов без блокировок.
Атомарность - это свойство одной операции с памятью (сохранение, загрузка или чтение-изменение-запись). На языке ассемблера выровненные загрузки и сохранения обычно по умолчанию атомарны ( как на x86), но чтение-изменение-запись подобноnum++
нет.
Системы транзакционной памяти позволяют изменять несколько переменных как одну атомарную операцию, похожую на транзакции базы данных.
В языках высокого уровня, где компилятор заботится о хранении переменных в регистрах или памяти, не всегда безопасно предполагать что-либо о том, когда / если действительно происходит сохранение / загрузка. В некоторых языках типа, где все операции являются атомными (например, C11 - х и C++11 - х stdatomic).