Eine atomare Operation (von griechisch άτομο átomo ‚unteilbar‘) bezeichnet in der Informatik einen Verbund von Einzeloperationen, der als logische Einheit betrachtet wird, nur als Ganzes erfolgreich abläuft oder fehlschlägt und nicht durch andere Operationen unterbrochen werden kann.
Dabei können die Einzeloperationen wiederum aus kleineren atomaren Operationen bestehen, bei deren Fehlschlag die höherrangige Operation in ihrer Ganzheit als fehlgeschlagen anzusehen ist. Dabei ist das Ziel, auf jeder Ebene den Überblick über die vielen möglichen fehlerhaften Zwischenzustände zu erleichtern und bei jedem Fehlschlag die Operation auf den aus ihrer Sicht konsistenten Zustand zurücksetzen zu können.
Der Begriff wird vor allem in der Datenbanktheorie und auf bestimmte CPU-Befehle angewendet.
Atomare Operationen auf CPU-Ebene
BearbeitenAtomare Operationen werden vor allem zur Implementierung von Sperrmechanismen (locking) verwendet, die in der Synchronisation von Daten und Prozessen (siehe Prozesssynchronisation) verwendet werden. Eine andere Variante ist die nicht-blockierende Synchronisation von Datenstrukturen, wobei Objekte nur durch atomare Operationen modifiziert werden, und das explizite Sperren der Objekte dadurch überflüssig wird.
Typische CPU-Befehle zur Implementierung von atomaren Operationen auf aktuellen Prozessoren sind z. B. Compare-and-swap- bzw. Load-Link/Store-Conditional-Befehlspaare auf RISC-Architekturen.
Bei interruptunterstützenden Prozessoren muss dabei während der Ausführung der atomaren Befehlsfolge die Möglichkeit bestehen, Interrupts zu unterdrücken. Dies ist zum Beispiel für die Implementierung von Semaphoren notwendig. Das Verändern der Semaphorvariablen darf nicht unterbrochen werden und wird als atomare Befehlsfolge ausgeführt. Das Unterbrechen dieses Codes kann etwa eine Mehrfachbelegung einer Ressource und damit möglicherweise einen Fehler zur Folge haben.
Atomare Datenbank-Operationen
BearbeitenEine Reihe von Änderungen an einer Datenbank kann zu einer Transaktion zusammengefasst werden, die entweder als Ganzes erfolgreich verläuft (Commit), oder durch einen Rollback rückgängig gemacht werden kann. Andere, neben der Atomarität erwünschte Eigenschaften von Transaktionen werden zumeist unter dem Akronym ACID zusammengefasst.
Atomare Operationen in Programmiersprachen
BearbeitenEinige Programmiersprachen beinhalten Konzepte zur Unterstützung atomarer Operationen. So gibt es beispielsweise in Java das Paket java.util.concurrent.atomic
mit Klassen, die atomares Vergleichen oder Tauschen unterstützen. Auch in Go gibt es native Unterstützung im sync/atomic
-Paket.
Generell ist die Festlegung atomarer Befehle immer dann wichtig, wenn Prozesse parallelisiert werden sollen. So bietet beispielsweise die stark auf Parallelisierung ausgelegte Programmiersprache Fortress die Möglichkeit, Anweisungsblöcke als atomic zu kennzeichnen, um Konflikte zu vermeiden.