Cuál es el significado de atómico en programación?

Glenn Hughes ha dado en el clavo con esta pregunta.

"Atómico" en programación viene de la idea filosófica de los antiguos griegos de cosas que son tan elementales que no pueden dividirse más. Irónicamente, la física nuclear ha demostrado que los átomos pueden dividirse, pero aún podemos apreciar la idea básica.

En informática, la idea de una operación atómica se refiere a una que sucede completamente o no sucede, al menos en lo que respecta a cualquier observador externo. Si tuviéramos atomicidad en la vida real, podrías ver un solar vacío en tu barrio, y en el siguiente segundo verías una casa completa y terminada allí.

Esto es importante y útil en informática. A veces sería un desastre si pudieras observar que una operación se produce por fases, poco a poco. El ejemplo clásico es una transferencia electrónica de fondos. Si le digo a mi banco que te envíe 100 dólares, el ordenador del banco deduce 100 dólares de mi cuenta y los abona en la tuya. Si el ordenador se estropea en medio de la operación, podrías acabar teniendo 100 dólares más mientras yo los tengo. La gente podría empezar a estropear los ordenadores intencionadamente. No sería bueno para los bancos. O digamos que sólo tengo 100 dólares; el ordenador de mi banco podría acreditarte los 100 dólares, pero mientras eso ocurre yo retiro rápidamente 100 dólares a través de un cajero automático porque el banco no es consciente de que mi cuenta ha sido intervenida en otro lugar.

No hay magia en la Informática para hacer que todas las partes de un programa informático sean perfectamente consistentes en todo momento. Pero la implementación técnica de muchos lenguajes y sistemas de programación proporciona mecanismos que, al menos, hacen que lo parezca, para que las distintas partes de un sistema no se corrompan entre sí con combinaciones de valores de datos que no tienen sentido. A menudo, pero no siempre, esto se logra asegurando que ciertos valores o grupos de valores sólo pueden ser accedidos por una pieza de código en un momento dado.