Kritischer Abschnitt & Mutual Exclusion

Auf einen Blick

Der kritische Abschnitt ist eine Code-Strecke, die nur von einem Prozess/Thread gleichzeitig durchlaufen werden darf. Das erfordert wechselseitigen Ausschluss (Mutual Exclusion) — beim Eintritt sind explizite Operationen nötig.

Worum es geht

Um Race Conditions zu vermeiden, müssen Abschnitte geschützt werden, in denen parallel auf gemeinsame Daten zugegriffen wird:

Kritischer Abschnitt/Pfad: Code-Strecke, die nur von einem Prozess/Thread gleichzeitig durchlaufen werden darf.

Ein kritischer Pfad erfordert mutual exclusion konkurrierender Prozesse:

  • Jeweils nur ein Prozess kann im kritischen Abschnitt sein.
  • Für den Eintritt sind explizite Operationen nötig.

Die typische Struktur

while (TRUE) {
    /* ... unkritischer Code ... */
    enter_critical(...);   // Eintritt anfordern
    /* ... kritischer Abschnitt ... */
    leave_critical(...);   // Austritt
    /* ... unkritischer Code ... */
}

Die Frage ist nur: Wie implementiert man enter_critical() / leave_critical()? Genau das beantworten die Verfahren der Synchronisation.

Klassifikation der Verfahren

Synchronisationsverfahren unterscheiden sich nach:

  • Zustand des Wartenden: aktiv (Schleife, spinningSpinlocks) oder passiv (blockiert, sleepingSemaphoren).
  • Beteiligung des OS: mit oder ohne explizite OS-Unterstützung.
  • Hardware-Unterstützung: manche nutzen spezielle atomare Befehle (z.B. TestAndSet).

Verwandte Notes

Race Conditions · Spinlocks · Semaphoren · Deadlocks

← Kapitelübersicht


⬅️ Race Conditions · Spinlocks ➡️

Built with LogoFlowershow