Wird von der Standardbibliothek bereitgestellt.
Ein Software-Semaphor (unterbrechbar)
BUSY = SEMA(CLAIM, RELEASE) bedeutet:
BUSY := X;
WENN ANSPRUCH DANN X:=WAHR;
ELSE IF RELEASE THEN BUSY := FALSE; X:= FALSE;
END_IF
X ist eine interne BOOL-Variable, die bei ihrer Initialisierung FALSE ist.
Die Eingangsvariablen CLAIM und RELEASE sowie die Ausgangsvariable BUSY sind vom Typ BOOL.
Wenn BUSY beim Aufruf von SEMA TRUE ist, bedeutet dies, dass SEMA bereits ein Wert zugewiesen wurde (SEMA wurde mit CLAIM = TRUE aufgerufen). Ist BUSY FALSE, wurde SEMA noch nicht abgerufen oder es wurde freigegeben (Abruf mit RELEASE = TRUE).
Beispiel für eine Erklärung
SEMAInst : SEMA ;
Beispiel im Funktionsblockdiagramm

Beispiel in strukturiertem Text
SEMAInst(CLAIM:=VarBOOL1 , RELEASE:=VarBOOL2 );
VarBOOL3 := SEMAInst.BUSY;