Semaphore (Signalmaste) sind Datenstrukturen zur Synchronisation des Zugriffs auf kritische Regionen oder Resourcen bei nebenläufigen Prozessen.
Die Datenstruktur verfügt über einen Zähler und eine Prozess-Warteschlange sowie über die Methoden wait und signal. Es wird festgelegt, wieviele kritische Prozesse existieren dürfen. Die Zahl dieser Prozesse wird im Zähler festgehalten. Übersteigt der Zähler den vorgeschriebenen Wert, wird die Methode wait aktiviert und reiht den letzten Prozess in eine Warteschlange ein. Der Zähler wird dabei heruntergesetzt. Wenn der Zähler den maximalen Wert unterschreitet, wird die Methode signal aktiviert. Sie holt den an der ersten Position befindlichen Prozess aus der Warteschlange und erhöht den Zähler. Eine andere Möglichkeit zur Synchronisation von kritischen Prozessen sind Monitore.
Im einfachsten Fall besteht ein Semaphor aus einem Bit, das gesetzt sein kann oder nicht. Ein Prozess, der einen kritischen Weg betritt, setzt das Semaphor-Bit. Dies verhindert das Betreten des Weges durch andere Prozesse. Der Semaphor wird wieder gelöst, wenn der Prozess den kritischen Weg verlässt. Eventuell vorhandene Prozesse in der Warteschlange werden dann nacheinander aktiviert.
Stehen z.B. drei gleiche Laserdrucker zu Verfügung, können die Druckaufträge über ein Semaphor mit dem Maximalwert drei verwaltet werden. Zunächst erhält jeder Drucker einen Auftrag. Überschreitet die Zahl der aktuellen Aufträge die Zahl drei, werden die überzähligen in die Warteschlange des Semaphors eingereiht.
Von besonderer Bedeutung bei der Benutzung von Semaphoren ist die Behandlung von sich gegenseitig behindernden Prozessen. Sogenannte deadlock-Situationen sich gegenseitig stoppender Prozesse sind eine häufige Ursache für Ablaufprobleme, Systemträgheiten oder dem "Einfrieren" des Systems.