create_mutex
— Erzeugen eines Mutex-Synchronisationsobjektes.
create_mutex( : : AttribName, AttribValue : MutexHandle)
Ein Mutex ist ein Synchronisationsobjekt, welches den wechselseitigen Ausschluss (MUTual EXclusion) zwischen den Threads eines Prozesses regelt. Damit lassen sich gleichzeitige Zugriffe auf gemeinsame Ressourcen wie beispielsweise globale Datenstrukturen blockieren um inkonsistente Zustände zu verhindern. Ein Mutex hat zwei mögliche Zustände: er ist frei, d.h. der Mutex wird von keinem Thread gehalten, oder gesperrt, d.h. er gehört einem bestimmten Thread. Threads, die versuchen einen Mutex zu sperren, der bereits von einem anderen Thread gehalten wird, müssen warten, bis dieser Thread den Mutex wieder frei gibt. Anders als bei Events kann nur der Thread einen gesperrten Mutex wieder freigeben, der ihn auch hält, d.h. der ihn gesperrt hat.
create_mutex
legt ein Mutexobjekt an und initialisiert es
entsprechend der Attribute, die über die Parameter AttribName
und AttribValue
spezifiziert werden. AttribName
definiert den Parameter und AttribValue
den Wert des Parameters.
Die folgende Beschreibung beschreibt für die möglichen Parametern alle
unterstützten Werte:
der leere String setzt die Standardattribute.
spezifiziert das Verhalten eines Mutexes, wenn ein Thread versucht einen bereits gesperrten Mutex zu besitzen:
unterbricht den aufrufenden Thread und legt ihn schlafen (Standard). Das Verhalten ist allerdings undefiniert, wenn der gesperrte Mutex bereits dem Thread gehört.
ist die schnelle Implementierung eines Mutexes, die in einer Schleife auf die Freigabe des Mutexes wartet. Das Verhalten ist allerdings undefiniert, wenn der gesperrte Mutex bereits dem Thread gehört.
unterbricht den aufrufenden Thread und legt ihn schlafen, wenn dem aufrufenden Thread der Mutex nicht gehört. Allerdings kann ein rekursiver Mutex erneut von dem Thread gesperrt werden, dem er gehört. Ein rekursiver Mutex wird nicht freigegeben, bis die Anzahl der Freigaben die Anzahl der Sperraufrufe erreicht.
Nach der Initialisierung ist der Mutex frei.
AttribName
(input_control) number(-array) →
(string / integer / real)
Mutex-Attribut
Defaultwert: []
Werteliste: 'type'
AttribValue
(input_control) number(-array) →
(string / integer / real)
Mutex-Attributwert
Parameteranzahl: AttribValue == AttribName
Defaultwert: []
Werteliste: 'recursive' , 'sleep' , 'spin'
MutexHandle
(output_control) mutex →
(handle)
Mutex-Synchronisationsobjekt
Sind die Parameterwerte korrekt, dann liefert create_mutex
den Wert 2 (H_MSG_TRUE). Gegebenenfalls
wird eine Fehlerbehandlung durchgeführt.
Foundation