Hauptmenü öffnen

In der Informatik bezeichnet eine atomare Operation (von griechisch άτομο átomo ‚unteilbar‘) einen Verbund von Einzeloperationen, der als logische Einheit betrachtet werden kann und nur als Ganzes erfolgreich abläuft oder fehlschlägt.

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-EbeneBearbeiten

Atomare 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.

Atomare Datenbank-OperationenBearbeiten

Eine 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 ProgrammiersprachenBearbeiten

Einigen 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.