Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

Kritischer Abschnitt

Kritische Abschnitte bestehen aus mehreren Einzelanweisungen, deren Zwischenergebnisse inkonsistente Zustände darstellen, auf die die anderen Threads keinen …

Inhalt4 Abschnitte
  1. 1. Bedeutung kritischer Abschnitte
  2. 2. Warum gleichzeitiger Zugriff problematisch ist
  3. 3. Kennzeichnung im Programm
  4. 4. Wechselseitiger Ausschluss und seine Anforderungen

Bedeutung kritischer Abschnitte

Ein kritischer Abschnitt ist in der Informatik eine Folge von Programmanweisungen zur Ablaufsteuerung. Zu einem Zeitpunkt darf sich darin nur ein Prozess oder Thread befinden. Dadurch werden gemeinsam genutzte Betriebsmittel geschützt, etwa Datenstrukturen, Speicherbereiche, Verbindungen, Geräte oder Datenbankinhalte.

Kritische Abschnitte enthalten mehrere Einzelanweisungen. Deren Zwischenergebnisse können inkonsistent sein und dürfen deshalb für andere Threads nicht zugänglich sein. Nach außen soll nur das gesamte Ergebnis als unteilbare Einheit sichtbar werden. Bei Datenbanken gehen diese Konzepte in die Transaktionsverarbeitung über.

Warum gleichzeitiger Zugriff problematisch ist

Sollen zwei Threads die gemeinsame Variable s inkrementieren, kann ein falsches Ergebnis entstehen, wenn ihre Anweisungen zeitlich verschränkt ausgeführt werden. Ein Inkrementieren besteht im einfachen Fall aus drei Schritten: den Wert von zaehler in eine lokale Variable lesen, die lokale Variable um 1 erhöhen und sie wieder in zaehler schreiben.

Führen Thread X und Thread Y diese Schritte verschränkt aus, lesen beide zunächst denselben ursprünglichen Wert. Beide erhöhen nur ihre private Kopie um 1. Schreiben anschließend beide ihren Wert zurück, überschreibt die letzte Schreibaktion die andere. Im beschriebenen Ablauf schreibt Thread Y zuletzt; das Endergebnis ist dann fälschlich 1 statt des erwarteten Ergebnisses.

Wird zusätzlich ein zweiter kritischer Abschnitt eingeführt, der dieselbe Variable zaehler dekrementiert, stehen beide Abschnitte in Beziehung zueinander. Aus Konsistenzgründen darf dann insgesamt höchstens ein Thread zugleich in einem dieser beiden kritischen Abschnitte sein.

Kennzeichnung im Programm

Programmier- und Modellierungssprachen verwenden gelegentlich Direktiven zur Markierung eines kritischen Abschnitts, zum Beispiel:

  • Begin_CriticalSection und End_CriticalSection
  • EnterCriticalSection() und LeaveCriticalSection()

Wechselseitiger Ausschluss und seine Anforderungen

Ein kritischer Abschnitt liegt vor, wenn ein Thread auf ein gemeinsam genutztes Betriebsmittel zugreift, das während einer verändernden Nutzung exklusiv verwendet werden muss. Zeitlich verschränkte Ausführungen solcher Abschnitte müssen verhindert werden, weil sie unvorhersagbare Ergebnisse oder inkonsistente Zustände verursachen können.

Erforderlich ist wechselseitiger Ausschluss: Befindet sich ein Thread in einem kritischen Abschnitt zu einem Betriebsmittel, darf kein anderer Thread einen kritischen Abschnitt zum selben Betriebsmittel betreten. Die kritischen Abschnitte werden dazu in beliebiger Reihenfolge nacheinander ausgeführt. Eine feste Reihenfolge ist nicht nötig.

Dies ist schwächer als die oft genannte vollständige Ununterbrechbarkeit: Der Abschnitt darf ausgeführt werden, solange er nicht zugunsten eines kritischen Abschnitts eines anderen Prozesses zum gleichen Betriebsmittel unterbrochen wird.

Eine Lösung muss vier Anforderungen erfüllen:

  • Wechselseitiger Ausschluss: Höchstens ein Thread befindet sich zu jedem Zeitpunkt im kritischen Abschnitt zu einem Betriebsmittel.
  • Fortschritt: Das Beenden oder Anhalten eines Prozesses außerhalb eines kritischen Abschnitts darf die übrigen Prozesse nicht aufhalten.
  • Begrenzte Wartezeit: Kein Thread darf beliebig lange vom Eintritt ausgeschlossen werden.
  • Es dürfen keine Annahmen über die Ausführungsgeschwindigkeit der Threads nötig sein.

Werden diese Anforderungen erfüllt, bleibt die Konsistenz der Betriebsmittel erhalten. Außerdem erreicht jeder Thread seinen kritischen Abschnitt in endlicher Zeit und wird nicht grundsätzlich am Eintritt gehindert.

Lernvideos zu Kritischer Abschnitt

Weiterlesen

Informatik Als einfache Rechengeräte leisteten Abakus und später der Rechenschieber unschätzbare Dienste. 1641 konstruierte Blaise Pascal eine mechanische … Prozess (Informatik) Ein Prozess ist die Ablaufumgebung für ein Programm auf einem Rechnersystem sowie der darin eingebettete Binärcode des Programmes während der Ausführung. Ein … Thread (Informatik) Kritischer Abschnitt · Nebenläufigkeit · Parallele Programmierung · Prozess · Threadsicherheit. Literatur. Bearbeiten. Peter Ziesche: Nebenläufige & verteilte … Betriebsmittel (Informatik) Bei wechselseitiger Abhängigkeit von Ressourcen führt ein Versagen der Zugriffsregelung zu einer sogenannten Verklemmung (deadlock). Manche Ressourcen wie z … Betriebssystem Betriebssysteme bestehen in der Regel aus einem Kernel (deutsch: Kern), der die Hardware des Computers verwaltet, sowie speziellen Programmen, die beim Start … Modell (Wissenschaft) In der Physik spielen Modelle ähnlich wie in der Chemie zur ... Beispiele für Modelle sind etwa Atommodelle, das Optische Modell in der Kernphysik … Prozesssynchronisation Gemeinsamer Zugriff auf Daten. Dabei muss verhindert werden, dass durch gleichzeitigen Zugriff Inkonsistenzen in den Daten entstehen. Dies wird durch Mutex- … Semaphor (Informatik) Semaphor (Informatik) Methode. Erzeuger und Verbraucher, sowie zur Koordination asynchroner Abläufe. Ein Semaphor ist eine Datenstruktur mit einer … Mutex Ein kritischer Abschnitt (engl. critical section oder critical region) ist derjenige Teil im ausführbaren Code, in dem ein wegen des Mutex ungestörter … Monitor (Informatik) Erzeuger/Verbraucher-Problem), in denen ein Prozess während der Ausführung einer Monitor-Operation feststellt, dass die Datenstruktur sich in einem Zustand …