Was ist die genaue Definition von ' Atomizität ' in der Programmierung?

Die Definition von „Atomizität“ besagt, dass eine Transaktion beendet werden kann, ohne durch möglicherweise gleichzeitig ausgeführte Aktionen während ihres Prozesses berührt oder manipuliert zu werden. Aber bedeutet das auch, dass ein Programm nicht gleichzeitig ausgeführt werden sollte, wenn es atomar sein soll?

Nehmen wir an, wir haben 2 Programme als Beispiel:

example_program1:

zählt int i = 1 bis 100 pro Sekunde

jede Zahl wird in neuer Zeile gedruckt

Beispielprogramm2:

druckt nur “ hi “

und ein übergeordnetes Programm, das beide Programme enthält, und führen sie aus, sobald sie ein Signal zum Starten eines bestimmten Programms erhalten (z via sigaction in linux) mit 2 version:

version 1:

führt das programm (auch gleichzeitig) jederzeit nach empfang des signales aus

was bedeutet, dass Programm2 “ hi “ drucken kann, während Programm1 noch die Zahlen

Version 2:

nur Führen Sie jeweils ein Programm aus.

Das Signal für ein anderes Programm wird blockiert, bis das laufende Programm beendet ist.

kann in diesem Beispiel nur Version 2 als atomar oder beides betrachtet werden? Wäre dieses Programm nur dann nicht atomar, wenn z. B. Programm2 i während seines Prozesses um 1 erhöhen würde?

Kommentare

  • Der Begriff “ atomar “ wird in unterschiedlichem Kontext auf (mehrere) verschiedene Arten verwendet. Manchmal auf sehr ähnliche, aber immer noch unterschiedliche Weise. Es wird oft auch informell verwendet. Ihre Frage beginnt mit einer Definition, die auf der Datenbanktheorie zu beruhen scheint, spricht dann aber über Programme. Ihre Definition spricht von “ Transaktionen „, aber es gibt keine Transaktionen in Ihrem Programm. ‚ Es ist wahrscheinlich, dass Sie versehentlich die falsche Definition von “ atomar “ verwenden. (Ihre Definition der Atomizität stimmt auch nicht wirklich mit der Bedeutung a a ACID überein.)

Antwort

Wenn eine Operation X atomar ist, bedeutet dies, dass jeder, der die Operation beobachtet, sie entweder als noch nicht gestartet oder als abgeschlossen sieht und sich in keinem Zustand befindet, der teilweise abgeschlossen ist. Das ist es.

Wenn Sie Code schreiben, um eine Operation X auszuführen, und anderer Code ihn zur Hälfte ausführen oder stören kann, ist Ihre Implementierung der Operation X natürlich nicht atomar.

In einigen Kontexten kann eine „atomare“ Operation erfolgreich sein oder fehlschlagen. Wenn eine solche atomare Operation fehlschlägt, muss der Effekt genau der gleiche sein, als ob die Operation nie gestartet worden wäre.

Kommentare

  • Als Hinweis bedeutet dies, was Isolation in ACID bedeutet, nicht was Atomicity bedeutet. ‚ ist nicht klar, ob Ihre Die Definition soll mit dem ACID-Begriff der Atomizität übereinstimmen (der nicht ‚ für einen beliebigen Code schrecklich relevant ist).

Antwort

Ich bin nicht sicher, ob ich eine einfache, formale, abstrakte Definition von „atomar“ für eine Programmiersprache kenne. Ich kenne viele verschiedene auf verschiedenen Abstraktionsebenen und in Bezug auf verschiedene Themen. Ich kenne auch einige, die ziemlich abstrakt erscheinen, aber ziemlich ausgefeilte Voraussetzungen haben (z. B. Presheaf-Modelle der Parallelität). Ein Teil des Problems besteht darin, dass es viele verschiedene Arten gibt, zwei Programme „äquivalent“ zu verhalten, und einige Definitionen unterschiedliche Begriffe von „äquivalent“ berücksichtigen können.

Eine Skizze (die ich mache) Ein Ansatz in Bezug auf ein Interleaving-Modell der Parallelität lautet: Bei gegebener operativer Semantik wird eine Folge von Anweisungen atomar ausgeführt wenn alle Übergänge (der operativen Semantik), die diese Anweisungen betreffen, nacheinander stattfinden. Eine Folge von Anweisungen ist atomar if Alle möglichen Folgen von Übergängen führen die Folge von Anweisungen atomar aus. Wir könnten dies zu einem „ als ob sie atomar ausgeführt würden“ lösen, das wir zu formalisieren beginnen könnten, indem wir sagen, dass alle möglichen Folgen von Übergängen äquivalent sind ( vermutlich beobachtungsmäßig äquivalent) zu einer Folge von Übergängen, die die Anweisungen atomar ausführt.

B. Asikal bedeutet atomar ausgeführt, dass wir, sobald wir mit der Ausführung einer Folge von Anweisungen beginnen, die Ausführung keiner anderen Anweisung in die Ausführung der Folge einbinden.In Bezug auf die Implementierung kann dies bedeuten, dass wir jeweils nur einen Thread ausführen, wie dies bei einer Time-Slicing-Implementierung von Threads der Fall ist. Eine Folge von Anweisungen, die atomar ausgeführt werden, bedeutet, dass während ihrer Ausführung keine Kontextwechsel aufgetreten sind. Die obige Definition hat das Problem, dass sie die Koordination zwischen Threads nicht wirklich gut handhabt. Es wäre nicht wirklich sinnvoll zu sagen, dass die Kommunikation entlang eines Kanals zwischen zwei Threads beispielsweise jemals atomar war. (Oft sprechen wir von Operationen an einer Datenstruktur als atomar, und das wäre wahrscheinlich besser für dieses Beispiel geeignet. Die Definition wäre spezifisch für die Datenstruktur.)

Für Ihr Beispielprogramm und unter der Annahme eines Betriebssemantik, bei der eine print -Anweisung in einem einzigen Übergang behandelt werden könnte, dann würde Programm 2 immer atomar ausgeführt und ist (ziemlich trivial) atomar. Ihre zweite Ausführung beschreibt ein Szenario, in dem Programm 1 atomar ausgeführt wird, während Ihre erste nicht ausgeführt wird. Wenn es einen Mechanismus gäbe, der garantiert, dass Ihre zweite Ausführung immer stattgefunden hat, dann könnten Sie sagen, dass Programm 1 (mit diesem Mechanismus) atomar ist, aber ansonsten wäre es vermutlich nicht atomar für sich.

Wie in meinem Artikel erwähnt Kommentar, „atomar“ wird oft in einem informellen und / oder implementierungsorientierten Sinne verwendet. Daher ist oft unklar, was genau beabsichtigt ist, obwohl der Geist dessen, was beabsichtigt ist, normalerweise vernünftig klar ist.

Antwort

Der tiefdunkle alte Ursprung des Wortes Atomic in der Programmierung bezieht sich auf eine Assembler-Anweisung ATOMIC. Ebenso wie eine Gruppe einzelner Teilchen (Proton, Neutron, Elektron) eine einzelne unzerbrechliche Einheit bildet, die als Atom bezeichnet wird, bezieht sich ATOMIC bei der Programmierung auf eine Gruppe von Montageanweisungen, die eine einzelne Anweisung für eine unterbrechungsfreie Einheit bilden . Die erste Montageanweisung ist ATOMIC, die alle Interrupts anhält, bis Interrupts mit etwas wie UNATOMIC erneut eingeleitet werden.

Seitdem wurde das Wort ATOMIC vom Marketing grob missbraucht. Das Aufrufen einer einzelnen Anweisung ATOMIC ist einfach albern.

ATOMIC war ursprünglich ein Akronym. Ich denke, es könnte „A seT? Of Multiple Instruction Clusters“ gewesen sein – sorry, nicht sicher über das T, es war viele Jahre.

Kommentare

  • Calling a single instruction ATOMIC is just silly Nun, es gab atomare Speicherübertragungen mit mehr als einem Buszyklus sowie Anweisungen wie Test And Set .

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.