LOCK(String
)
Mit dieser Funktion können Sie einige Passagen des Rufnummernplans
serialisieren. Das heißt, dass immer nur ein Anrufer nach dem anderen das
mit dem LOCK-Mechanismus "gesicherte" Stück Rufnummernplan durchlaufen kann.
Diese Technologie ist aus der Threadprogrammierung auch in Form eines
Mutex bekannt. Als Parameter muss der frei wählbare Name des
Mutexes übergeben werden. Wenn der Mutex schon blockiert ist, dann wartet
die Funktion max. 3 Sekunden und liefert danach 0
zurück. Wenn
der Mutex normal gelockt werden konnte, liefert die Funktion 1
zurück. Der Mutex ist wieder frei, wenn der Channel aufgelegt wurde oder
UNLOCK()
aufgerufen wurde.
; Sperre das Ausführen eines Systembefehls durch einen Mutex
exten => 123,1,GotoIf(${LOCK(lock1)}?locked,1)
exten => 123,n,System(kritisches-skript.sh)
exten => 123,n,Hangup()
exten => locked,1,Playback(mutex-ist-gelockt-bitte-warten)
exten => locked,n,Goto(,123,1)
— in Asterisk 1.4 nicht vorhanden —