Qual è il significato di atomico nella programmazione?

Glenn Hughes ha per lo più inchiodato questa domanda.

"Atomico" nella programmazione deriva dall'idea filosofica degli antichi greci di cose che sono così elementari da non poter essere ulteriormente divise. Ironicamente, la fisica nucleare ha dimostrato che gli atomi possono essere divisi, ma possiamo ancora apprezzare l'idea di base.

In informatica, l'idea di un'operazione atomica si riferisce ad una che avviene completamente o per niente, almeno per quanto riguarda gli osservatori esterni. Se avessimo l'atomicità nella vita reale, potreste vedere un lotto vuoto nel vostro quartiere, e nel secondo successivo vedreste una casa completa e finita lì.

Questo è importante e utile in informatica. A volte sarebbe un disastro se si potesse osservare un'operazione che avviene per fasi, bit per bit. L'esempio classico è un trasferimento elettronico di fondi. Se dico alla mia banca di mandarti 100 dollari, il computer della banca detrae 100 dollari dal mio conto e li accredita sul tuo. Se il computer si bloccasse a metà dell'operazione, tu potresti finire per avere 100 dollari in più mentre io li ho ancora. La gente potrebbe iniziare a far crashare i computer intenzionalmente. Non andrebbe bene per le banche! O supponiamo che io abbia solo 100 dollari; il computer della mia banca potrebbe accreditare i 100 dollari a te, ma mentre ciò accade io prelevo rapidamente 100 dollari tramite un bancomat perché la banca non sa che il mio conto è stato prelevato altrove.

Non c'è nessuna magia nell'informatica per rendere tutte le parti di un programma perfettamente coerenti in ogni momento. Ma l'implementazione tecnica di molti linguaggi di programmazione e sistemi fornisce meccanismi che almeno lo fanno sembrare tale, così le varie parti di un sistema non si corrompono a vicenda con combinazioni di valori di dati che non hanno senso. Spesso, ma non sempre, questo viene realizzato facendo in modo che certi valori o gruppi di valori possano essere accessibili solo da un pezzo di codice in un dato momento.