Critical Section

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 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 kritische 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:

  • Critical section — In concurrent programming a critical section is a piece of code that accesses a shared resource (data structure or device) that must not be concurrently accessed by more than one thread of execution. A critical section will usually terminate in… …   Wikipedia

  • critical section — noun A piece of code that accesses a shared resource that must not be concurrently accessed by more than one thread of execution …   Wiktionary

  • Critical Incident Stress Management — is an adaptive short term helping process that focuses solely on an immediate and identifiable problem to enable the individual(s) affected to return to their daily routine(s) more quickly and with a lessened likelihood of experiencing post… …   Wikipedia

  • Section Twenty-three of the Canadian Charter of Rights and Freedoms — is the section of the Charter that constitutionally guarantees minority language educational rights to French speaking communities outside Quebec, and, to a lesser extent, English speaking minorities in Quebec. The section may be particularly… …   Wikipedia

  • Critical Mass (Threshold album) — Critical Mass Studio album by Threshold Released September 2, 2002 …   Wikipedia

  • Critical theory — Horkheimer, Adorno, Habermas David Rasmussen HEGEL, MARX AND THE IDEA OF A CRITICAL THEORY Critical theory1 is a metaphor for a certain kind of theoretical orientation which owes its origin to Hegel and Marx, its systematization to Horkheimer and …   History of philosophy

  • Critical legal studies — is a movement in legal thought that applied methods similar to those of critical theory (the Frankfurt School) to law. The abbreviations CLS and Crit are sometimes used to refer to the movement and its adherents. Contents 1 History 2 Themes 3… …   Wikipedia

  • Critical rationalism — is an epistemological philosophy advanced by Karl Popper. Popper wrote about critical rationalism in his works, The Open Society and its Enemies Volume 2, and Conjectures and Refutations. Contents 1 Criticism, not support 2 Not justificationism …   Wikipedia

  • Critical Quarterly — is a peer reviewed academic journal in the humanities published by Wiley Blackwell. The editor in chief is Colin MacCabe. Contents 1 History 1.1 Early Years 1.2 The Black Papers …   Wikipedia

  • Section 1782 Discovery — Section 1782 of Title 28 of the United States Code is a federal statute that allows a litigant (party) to a legal proceeding outside the United States to apply to an American court to obtain evidence for use in the non US proceeding. The full… …   Wikipedia

Share the article and excerpts

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