Kritischer Abschnitt

Kritischer Abschnitt

Als Kritischer Abschnitt wird in der Informatik ein Abschnitt im Programm eines Prozesses/Threads bezeichnet, in dem Betriebsmittel (z. B. Datenstrukturen, Verbindungen, Geräte usw.) verändert werden und der nicht parallel oder zeitlich verzahnt zu Programmabschnitten anderer Prozesse/Threads ausgeführt werden darf, in denen die gleichen Betriebsmittel ebenfalls verändert werden. Andernfalls kommt es zu inkonsistenten Zuständen der Betriebsmittel.

Beispiel

Folgende einfache Ausführungssituation mit einem Programmabschnitt, in dem in einer Variablen zähler etwas gezählt wird, soll veranschaulichen, was einen Programmabschnitt zu einem kritischen Abschnitt macht. Die Veränderung des Variableninhalts kann nicht direkt auf der Variablen ausgeführt werden, sondern muss lokal in dem ausführenden Thread erfolgen. Der Programmabschnitt lautet:

  zähler in lokale Variable lesen
  lokale Variable um 1 erhöhen
  lokale Variable in zähler schreiben

Nun werde dieser Programmabschnitt von zwei Threads zeitlich verschränkt ausgeführt. Die zeitliche Verschränkung wird vom Laufzeitsystem/Betriebssystem vorgenommen. Die Threads haben darauf keinen Einfluss. Beide Threads greifen dann unabhängig voneinander auf die Zählvariable zu, verarbeiten und verändern sie:

      Thread A          Thread B
1: zähler lesen
2:                   zähler lesen
3: um 1 erhöhen
4:                   um 1 erhöhen
5: zähler schreiben 
6:                   zähler schreiben

Vor dem Schritt 3 wird von beiden Threads der gleiche ursprüngliche Wert der Variablen zähler gelesen. Die Threads haben diesen Wert als private Kopie. In den Schritten 3 und 4 addieren beide Threads jeweils 1 zu ihrer privaten Kopie. In den Schritten 5 und 6 speichern die Threads dann den neuen Wert aus ihren privaten Kopien zurück in die Variable zähler. Dabei „gewinnt“ Thread B, da seine Schreibaktion zuletzt ausgeführt wird. Eine solche Situation wird auch eine Wettlaufsituation (engl. race condition) genannt.

Der Programmabschnitt wird zweimal ausgeführt. Erwartet wird daher, dass der Wert von zähler um 2 erhöht wird. Die zweimalige Ausführung erfolgt zeitlich verschränkt. Es wird jedoch nur die Veränderung durch den Thread B sichtbar. Trotz zweimaliger Ausführung des Programmabschnitts wird zähler nur um 1 erhöht. Wird der Programmabschnitt hingegen zweimal zeitlich hintereinander ausgeführt, so ergibt sich das erwartete Ergebnis. Die Abhängigkeit des Ergebnisses einer mehrfachen Ausführung des Programmabschnitts von der Art der zeitlichen Ausführung ist nicht erwünscht.

Merkmal und Behandlung kritischer Abschnitte

Werden Prozesse oder Threads parallel oder zeitlich verzahnt ausgeführt und benutzen sie Daten (Speicherbereiche) oder allgemein Betriebsmittel (z. B. Verbindungen, Geräte) gemeinsam, so gibt es Betriebsmittel, die ihrer Natur nach nur exklusiv benutzt werden sollten: während der Ausführung eines Programmabschnitts von einem Prozess/Thread, in dem das Betriebsmittel verändernd verwendet wird, darf das Betriebsmittel für andere Prozesse/Threads nicht zugreifbar sein. Ein Programmabschnitt im Programm eines Prozesses/Threads, in dem auf ein gemeinsam genutztes, aber exklusiv zu nutzendes Betriebsmittel zugegriffen wird, ist ein kritischer Abschnitt.

Es gilt, eine zeitlich verschränkte Ausführung kritischer Abschnitte paralleler Prozesse/Threads zu verhindern, da diese zu unvorhersagbaren Ergebnissen oder inkonsistenten Zuständen der Betriebsmittel führt. Es ist aber nicht erforderlich, eine strenge Reihenfolge der Nutzung des Betriebsmittels festzulegen. Es ist ausreichend, für einen wechselseitigen Ausschluss der Zugriffe zu sorgen. Wenn sich ein Prozess/Thread in seinem kritischen Abschnitt bezüglich eines Betriebsmittels befindet, darf kein anderer Prozess/Thread in seinen kritischen Abschnitt bezüglich des gleichen Betriebsmittels gelangen. Dies wird durch eine beliebige Sequentialisierung der Ausführung kritischer Abschnitte der zugreifenden Prozesse/Threads erreicht. Dies ist eine schwächere Anforderung als die Anforderung nach Ununterbrechbarkeit der Ausführung eines kritischen Abschnitts, die oftmals im Zusammenhang mit kritischen Abschnitten erwähnt wird. Wird ein kritischer Abschnitt ausgeführt, so darf dieser nur nicht zugunsten der Ausführung des kritischen Abschnitts (bezüglich des gleichen, gemeinsam genutzten Betriebsmittels) eines anderen Prozesses unterbrochen werden.

An eine Lösung für das Problem des wechselseitigen Ausschlusses zum Umgang mit kritischen Abschnitten werden folgende Anforderungen gestellt:

  • Zu jedem Zeitpunkt befindet sich höchstens ein Prozess/Thread in einem kritischen Abschnitt.
  • Eine Beendigung oder ein Anhalten eines Prozesses außerhalb seines kritischen Abschnitts darf keinen Einfluss auf den Fortschritt der verbleibenden Prozesse haben.
  • Kein Prozess/Thread darf beliebig lange vom Betreten seines kritischen Abschnitts ausgeschlossen werden.
  • Die Lösung darf keine Annahme über die Ausführungsgeschwindigkeit der Prozesse/Threads machen.

Sind diese Anforderungen erfüllt, dann ist die Konsistenz der Betriebsmittel gewährleistet. Ferner kommt jeder Prozess/Thread in endlicher Zeit in seinen kritischen Abschnitt und wird nicht grundsätzlich am Eintritt in seinen kritischen Abschnitt gehindert.

Siehe auch


Wikimedia Foundation.

Игры ⚽ Нужно сделать НИР?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • kritischer Abschnitt — kritischer Abschnitt,   Semaphor …   Universal-Lexikon

  • Kritischer Bereich — ist die Bezeichnung für: den Kritischen Abschnitt in der Informatik den Ablehnbereich in der schließenden Statistik Diese Seite ist eine Begriffsklärung zur Unterscheidung mehrerer mit demselben Wort bezeichneter B …   Deutsch Wikipedia

  • Kritischer Rationalismus — Der Kritische Rationalismus ist eine von Karl R. Popper begründete philosophische Denkrichtung. Popper beschreibt ihn als Lebenseinstellung, „die zugibt, dass ich mich irren kann, dass du recht haben kannst und dass wir zusammen vielleicht der… …   Deutsch Wikipedia

  • Kritischer Empirismus — Der Falsifikationismus, auch Kritischer Empirismus, ist die ursprünglich von Karl R. Popper entwickelte Wissenschaftstheorie des Kritischen Rationalismus. Er schlägt mit dem Abgrenzungskriterium der Falsifizierbarkeit und der Methode der… …   Deutsch Wikipedia

  • Kritischer Vorfall — Kritikalität bezeichnet in der Kerntechnik sowohl die Neutronenbilanz einer kerntechnischen Anlage als auch den kritischen Zustand eines Kernreaktors oder einer Spaltstoffanordnung. Eine Anordnung ist kritisch, wenn pro Zeiteinheit ebensoviele… …   Deutsch Wikipedia

  • Umfassend Kritischer Rationalismus — Der Pankritische Rationalismus, auch Umfassend Kritischer Rationalismus, ist eine von William W. Bartley entwickelte Ergänzung des Kritischen Rationalismus von Karl Popper. Sie führt eine allumfassende Methode der Kritik ein, die auf der… …   Deutsch Wikipedia

  • Gegenseitiger Ausschluss — Der Begriff Wechselseitiger Ausschluss bzw. Mutex (Abk. für engl. mutual exclusion, auf deutsch etwa wechselseitiger Ausschluss) bezeichnet eine Gruppe von Verfahren, mit denen das Problem des kritischen Abschnitts gelöst wird. Mutex Verfahren… …   Deutsch Wikipedia

  • Wechselseitiger Ausschluss — Der Begriff Wechselseitiger Ausschluss bzw. Mutex (Abk. für engl. mutual exclusion, auf deutsch etwa wechselseitiger Ausschluss) bezeichnet eine Gruppe von Verfahren, mit denen das Problem des kritischen Abschnitts gelöst wird. Mutex Verfahren… …   Deutsch Wikipedia

  • Critical Section — Als Kritischer Abschnitt wird in der Informatik ein Abschnitt im Programm eines Prozesses/Threads bezeichnet, in dem Betriebsmittel (z. B. Datenstrukturen, Verbindungen, Geräte usw.) verändert werden und der nicht parallel oder zeitlich verzahnt… …   Deutsch Wikipedia

  • Mutex — Der Begriff Wechselseitiger Ausschluss bzw. Mutex (Abk. für engl. mutual exclusion) bezeichnet eine Gruppe von Verfahren, mit denen das Problem des kritischen Abschnitts gelöst wird. Mutex Verfahren verhindern, dass nebenläufige Prozesse bzw.… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”