SBY

Nebenläufigkeit

Nebenläufigkeit, Parallelität, Race Conditions, kritische Abschnitte, Mutex, Semaphore, Starvation und Deadlocks.

Nebenläufigkeit

Nebenläufigkeit bedeutet, dass mehrere Abläufe logisch gleichzeitig Fortschritt machen. Sie müssen nicht zwingend exakt zur selben Zeit auf mehreren CPUs laufen.

Parallelität bedeutet, dass mehrere Abläufe tatsächlich gleichzeitig ausgeführt werden, zum Beispiel auf mehreren CPU-Kernen.

Nebenläufigkeit vs. Parallelität

BegriffBedeutung
NebenläufigkeitMehrere Aufgaben wechseln sich ab oder laufen überlappend.
ParallelitätMehrere Aufgaben laufen wirklich gleichzeitig.

Ein Single-Core-System kann nebenläufig sein. Ein Multi-Core-System kann zusätzlich parallel arbeiten.

Datenparallelität und Aufgabenparallelität

ArtBeschreibung
DatenparallelitätGleiche Operation auf mehreren Datenbereichen.
AufgabenparallelitätUnterschiedliche Aufgaben laufen gleichzeitig oder überlappend.

Mehr Threads bedeuten aber nicht automatisch mehr Geschwindigkeit. Nach Amdahl's Law begrenzt der nicht parallelisierbare Teil eines Programms den maximalen Speedup.

Race Conditions

Eine Race Condition entsteht, wenn das Ergebnis eines Programms von der zeitlichen Reihenfolge nebenläufiger Zugriffe abhängt.

Typisches Beispiel:

  1. Thread A liest einen Wert.
  2. Thread B liest denselben Wert.
  3. Thread A schreibt einen neuen Wert.
  4. Thread B schreibt seinen neuen Wert.

Ein Update geht verloren, obwohl beide Threads scheinbar korrekt arbeiten.

Kritischer Abschnitt

Ein kritischer Abschnitt ist ein Codebereich, in dem gemeinsam genutzte Daten verändert werden.

Ziel:

  • maximal ein Thread im kritischen Abschnitt
  • keine verlorenen Updates
  • keine inkonsistenten Daten
  • keine endlosen Wartezustände

Mutex

Ein Mutex funktioniert wie ein einzelner Schlüssel zu einem Raum.

  • Wer den Schlüssel hat, darf hinein.
  • Alle anderen müssen warten.
  • Beim Verlassen wird der Schlüssel wieder freigegeben.

Mutexe schützen kritische Abschnitte, können aber bei falscher Nutzung zu Deadlocks führen.

Semaphore

Eine Semaphore ist wie eine Ampel oder ein Türsteher mit begrenzter Kapazität.

Sie erlaubt nicht nur einen einzigen Zugriff, sondern eine definierte Anzahl gleichzeitiger Zugriffe.

Beispiel: Maximal drei Threads dürfen eine Ressource gleichzeitig verwenden.

Petersons Algorithmus

Petersons Algorithmus ist ein klassisches Verfahren, um kritische Abschnitte zwischen zwei Prozessen ohne spezielle Hardware-Instruktionen zu koordinieren.

Er ist vor allem didaktisch wichtig, weil er zeigt:

  • gegenseitiger Ausschluss ist möglich
  • Reihenfolge und Absicht müssen sichtbar gemacht werden
  • Synchronisation ist anspruchsvoll

Starvation

Starvation bedeutet, dass ein Prozess oder Thread dauerhaft keine Ressource bekommt.

Ursachen:

  • schlechte Prioritätsvergabe
  • unfairer Scheduler
  • dauerhaft bevorzugte andere Prozesse
  • ungünstige Sperrlogik

Gegenmaßnahmen:

  • faire Scheduling-Verfahren
  • Aging
  • klare Zeitlimits
  • saubere Prioritätsregeln

Deadlocks

Ein Deadlock entsteht, wenn mehrere Prozesse gegenseitig auf Ressourcen warten und keiner weitermachen kann.

Beispiel:

  • Prozess A hält Ressource 1 und wartet auf Ressource 2.
  • Prozess B hält Ressource 2 und wartet auf Ressource 1.

Typische Gegenmaßnahmen:

  • feste Reihenfolge beim Sperren von Ressourcen
  • Timeouts
  • Deadlock-Erkennung
  • Deadlock-Vermeidung
  • Ressourcenfreigabe bei Fehlern

Klassische Synchronisationsprobleme

In Betriebssystemen werden häufig klassische Denkmodelle verwendet:

  • Sleeping Barber
  • Dining Philosophers
  • Producer-Consumer
  • Cigarette Smokers
  • Readers-Writers

Diese Beispiele zeigen, wie leicht Nebenläufigkeit zu Warteproblemen, Race Conditions oder Deadlocks führen kann.

Merksatz

Nebenläufigkeit macht Systeme leistungsfähiger, aber auch schwieriger. Sicherheit entsteht durch klare Sperren, faire Planung und kontrollierten Zugriff auf gemeinsame Daten.

Zuletzt aktualisiert: 6. Juni 2026