Question 3
Semaphoren
Eine Semaphore besteht im Wesentlichen aus zwei Komponenten:
-
einem Zähler und
-
einer Warteschlange für blockierte Threads.
📊 Der Zähler gibt an, wie viele Ressourcen aktuell verfügbar sind. Er wird zu Beginn mit der Anzahl verfügbarer Ressourcen initialisiert.
🧵 Möchte ein Thread eine Ressource nutzen:
-
Ist der Zähler größer als 0, wird er dekrementiert, und der Thread erhält Zugriff.
-
Ist der Zähler 0, wird der Thread in die Warteschlange eingereiht, bis wieder eine Ressource verfügbar ist.
🔒 Bei kritischen Abschnitten, in denen nur ein Thread gleichzeitig aktiv sein darf, wird die Semaphore mit einem Anfangswert von 1 initialisiert. Dies nennt man auch ein binäres Semaphor (vergleichbar mit einem Mutex).