D.104. TRYLOCK()

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)
    
Asterisk-Versionen:
        |     |        |     |        | 1.6 |————————
Interner Hilfetext zu dieser Funktion in Asterisk 1.6:
  -= Info about function 'TRYLOCK' =-

[Syntax]
TRYLOCK(<lockname>)

[Synopsis]
Attempt to obtain a named mutex

[Description]
Attempts to grab a named lock exclusively, and prevents other channels
from obtaining the same lock.  Returns 1 if the lock was available or 0
otherwise.
Differenz des internen Hilfetexts von Asterisk 1.4 zu 1.6:
— in Asterisk 1.4 nicht vorhanden —