Oft hat man in der Datenverarbeitung den Wunsch, einen bestimmten Prozeß eine Datei
zuerst bearbeiten zu lassen. Das kann z.B. der Fall sein, wenn ein Prozeß zuerst
schreibend auf eine Datei zugreifen soll und ein anderer dann lesend. Zur Durchsetzung
dieser Reihenfolge kann ein Semaphor mit dem Wert 0 initialisiert werden. Den
schreibenden Prozeß programmiert man so, daß er zunächst schreibt und
anschließend eine V-Operation auf den Semaphor ausführt. Den Leser läßt
man zuerst eine P-Operation durchführen und danach lesen. Falls der Leser zuerst
aktiv wird, muß er blockieren. Wenn dann der Schreiber kommt, kann er den Leser wieder
entblockieren, nachdem er geschrieben hat.
Das folgende Applet veranschaulicht dieses Problem:
Das rosafarbene Quadrat stellt den Semaphor dar. Durch Anklicken des Feldes
S0.INIT(0) wird der Semaphor initialisiert, und es erscheinen drei Zahlen. Die kleine Zahl links
oberhalb des Semaphors kennzeichnet seine Nummer. Die große Zahl rechts innerhalb
gibt seinen count-Wert an, und die kleine Zahl links unten sagt aus, wieviele Prozesse
sich im Warteraum des Semaphors befinden.
Nach der Initialisierung können die Programmschritte der beiden Prozesse, die grau
unterlegt und im unteren Feld dargestellt sind, angeklickt werden. Die einzelnen
Programmschritte können nur in der angegebenen Reihenfolge abgearbeitet werden, so muß
der Schreiber immer erst die "schreibt" Funktion ausführen, bevor er die Funktion "S0.V(1)"
ausführen kann. Der zuletzt bearbeitete Programmschritt der Prozesse wird durch einen
kleinen Pfeil gekennzeichnet. Das Feld, das zuletzt angeklickt wurde, wird gelb hinterlegt.