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
releaseblockiert für immer, falsche Reihenfolge führt zum Deadlock. - Sprachen: In Java
Semaphore, in Pythonthreading.Semaphore, in Go meist ein Kanal mit Puffer.
Siehe auch: Mutex (gegenseitiger Ausschluss), Deadlock (Verklemmung)