TRYLOCK(param
)
Mit dieser Funktion ist es möglich, einige Passagen des
Rufnummernplans zu serialisieren. Die Funktion ist
LOCK()
sehr ähnlich. Der einzige Unterschied besteht
darin, das nicht 3 Sekunden gewartet wird, wenn der Mutex schon gesperrt
ist. 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 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(${TRYLOCK(lock1)}?locked,1)
exten => 123,n,System(kritisches-skript.sh)
exten => 123,n,Hangup()
exten => locked,1,Verbose(1, Der Mutex ist schon gelockt)
— in Asterisk 1.4 nicht vorhanden —