Na programação, a atomicidade descreve a indivisibilidade de uma operação; isto é, toda a operação foi concluída ou nada dela. Em algumas linguagens de programação, principalmente Ruby e JavaScript, a atomicidade é chamada de *escopo atômico*.
Para entender a atomicidade e os escopos atômicos, considere a seguinte sequência de operações não atômicas para modificar o saldo bancário de um usuário:
1. Leia o saldo do banco.
2. Subtraia o valor da transação do saldo.
3. Devolver o saldo ao banco.
Para que essas operações sejam bem-sucedidas, o banco de dados precisa estar bloqueado entre a leitura e a gravação, caso contrário, outra transação poderá gravar no banco de dados entre essas duas operações. Além disso, se algo der errado durante a transação (por exemplo, o banco de dados ficar offline durante a operação de gravação), a operação deverá falhar completamente e o banco de dados deverá ser restaurado ao estado em que se encontrava antes do início da transação.
Com a atomicidade, a série de operações se comporta como uma única operação ou falha totalmente. Ou seja, o código para executar uma determinada operação é incluído em um *escopo atômico* e, se alguma operação na sequência falhar, toda a transação será revertida, como se nenhuma das operações na sequência tivesse ocorrido.
Um escopo atômico garante:
1. Se nenhuma operação no escopo falhar, todas as operações ocorrerão;
2. Se alguma operação no escopo falhar, nenhuma das operações ocorrerá; e
3. Se alguma operação começar a falhar, todas as operações que já ocorreram serão imediatamente revertidas, restaurando o sistema ao seu estado anterior ao início de qualquer uma das operações.