Definition und Zweck:
Eine Semaphore ist ein grundlegender Synchronisationsmechanismus in der Informatik und Automatisierungstechnik. Sie dient dazu, den konkurrierenden Zugriff mehrerer Tasks (Aufgaben, Programme) auf eine begrenzte Anzahl von identischen Ressourcen zu kontrollieren. Im Gegensatz zu einem Mutex, der den exklusiven Zugriff auf eine einzelne Ressource regelt, ist eine Semaphore zähler-basiert und kann den Zugriff von mehreren Tasks auf eine bestimmte Anzahl von Ressourcen gleichzeitig erlauben.
Das Hauptziel einer Semaphore ist es, die Datenintegrität und die korrekte Ressourcennutzung in Multitasking-Umgebungen zu gewährleisten und Datenkonflikte (Race Conditions) zu verhindern.
Funktionsweise (Beispiel):
Stellen Sie sich eine Semaphore mit einem Zählerstand von `N` vor, der die Anzahl der verfügbaren Ressourcen repräsentiert (z.B. N Drucker, N Datenbankverbindungen).
- Eine Task möchte auf eine Ressource zugreifen und führt eine „down-Operation“ (oder `P`-Operation, `wait`, `acquire`) aus.
- Wenn der Zähler der Semaphore größer als Null ist, wird er um eins dekrementiert, und die Task erhält Zugriff auf eine Ressource.
- Wenn der Zähler Null ist, muss die Task warten, bis eine Ressource freigegeben wird.
- Nachdem eine Task die Ressource nicht mehr benötigt, führt sie eine „up-Operation“ (oder `V`-Operation, `signal`, `release`) aus, und der Zähler der Semaphore wird um eins inkrementiert. Eine wartende Task erhält dann möglicherweise Zugriff.
Abgrenzung zu Mutex:
- Mutex: Regelt den exklusiven Zugriff auf eine *einzelne, eindeutige* Ressource (binär: gesperrt/frei).
- Semaphore: Regelt den Zugriff auf eine *begrenzte Anzahl von identischen* Ressourcen (Zähler). Eine binäre Semaphore (Zähler 0 oder 1) kann als Mutex fungieren.
Relevanz in der Automatisierungstechnik:
Semaphoren sind unverzichtbar in modernen SPSen und PC-basierten Steuerungen, die Multitasking und den Zugriff mehrerer Tasks auf gemeinsame Ressourcen unterstützen:
- Ressourcenmanagement: Kontrolle des Zugriffs auf begrenzte Ressourcen wie Drucker, serielle Schnittstellen, Datenbankverbindungen oder Pufferspeicher.
- Datenkonsistenz: Schutz von Datenbereichen, die von mehreren Tasks gleichzeitig gelesen, aber nur begrenzt geschrieben werden dürfen.
- Synchronisation: Koordination des Programmflusses zwischen verschiedenen Tasks.
- Echtzeitbetriebssysteme: Grundlegender Bestandteil von Echtzeitbetriebssystemen (RTOS), die eine deterministische Ausführung und den Schutz von Ressourcen gewährleisten.
Die korrekte Anwendung von Semaphoren ist entscheidend für die Stabilität und Zuverlässigkeit von Multitasking-SPS-Programmen.
→ Siehe auch: Mutex, Datenkonsistenz, Multitasking, Task, Synchronisation, SPS-Programmierung

