EMZETT.
Login

Semaphore

Kurz: Ein Semaphor ist ein Zähler, der regelt, wie viele Threads gleichzeitig auf eine begrenzte Ressource zugreifen dürfen. Ein Mutex ist der Sonderfall mit dem Wert 1.

Genauer: Vor dem Zugriff wird der Zähler vermindert (acquire/wait). Ist er null, wartet der Thread. Nach dem Zugriff wird er erhöht (release/signal) und ein wartender Thread darf weitermachen.

Im Detail

  • Beispiel: Höchstens 5 gleichzeitige Datenbankverbindungen: Semaphor mit Startwert 5.
  • Binärer Semaphor: Wert 0 oder 1, ähnelt einem Mutex. Der Unterschied: Ein Semaphor darf von einem anderen Thread freigegeben werden.
  • Erzeuger-Verbraucher: Ein Semaphor zählt freie Plätze, ein weiterer belegte Einträge im Puffer.
  • Gefahren: Vergessenes release blockiert für immer, falsche Reihenfolge führt zum Deadlock.
  • Sprachen: In Java Semaphore, in Python threading.Semaphore, in Go meist ein Kanal mit Puffer.

Siehe auch: Mutex (gegenseitiger Ausschluss), Deadlock (Verklemmung)