KlassenKlassenKlassenKlassen | | | | Operatoren

create_mutexcreate_mutexCreateMutexcreate_mutexCreateMutexCreateMutex (Operator)

Name

create_mutexcreate_mutexCreateMutexcreate_mutexCreateMutexCreateMutex — Erzeugen eines Mutex-Synchronisationsobjektes.

Signatur

create_mutex( : : AttribName, AttribValue : MutexHandle)

Herror create_mutex(const char* AttribName, const char* AttribValue, Hlong* MutexHandle)

Herror T_create_mutex(const Htuple AttribName, const Htuple AttribValue, Htuple* MutexHandle)

Herror create_mutex(const HTuple& AttribName, const HTuple& AttribValue, Hlong* MutexHandle)

void HMutex::CreateMutex(const HTuple& AttribName, const HTuple& AttribValue)

void CreateMutex(const HTuple& AttribName, const HTuple& AttribValue, HTuple* MutexHandle)

void HMutex::HMutex(const HTuple& AttribName, const HTuple& AttribValue)

void HMutex::HMutex(const HString& AttribName, const HString& AttribValue)

void HMutex::HMutex(const char* AttribName, const char* AttribValue)

void HMutex::CreateMutex(const HTuple& AttribName, const HTuple& AttribValue)

void HMutex::CreateMutex(const HString& AttribName, const HString& AttribValue)

void HMutex::CreateMutex(const char* AttribName, const char* AttribValue)

void HOperatorSetX.CreateMutex(
[in] VARIANT AttribName, [in] VARIANT AttribValue, [out] VARIANT* MutexHandle)

void HMutexX.CreateMutex(
[in] VARIANT AttribName, [in] VARIANT AttribValue)

static void HOperatorSet.CreateMutex(HTuple attribName, HTuple attribValue, out HTuple mutexHandle)

public HMutex(HTuple attribName, HTuple attribValue)

public HMutex(string attribName, string attribValue)

void HMutex.CreateMutex(HTuple attribName, HTuple attribValue)

void HMutex.CreateMutex(string attribName, string attribValue)

Beschreibung

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_mutexcreate_mutexCreateMutexcreate_mutexCreateMutexCreateMutex legt ein Mutexobjekt an und initialisiert es entsprechend der Attribute, die über die Parameter AttribNameAttribNameAttribNameAttribNameAttribNameattribName und AttribValueAttribValueAttribValueAttribValueAttribValueattribValue spezifiziert werden. AttribNameAttribNameAttribNameAttribNameAttribNameattribName definiert den Parameter und AttribValueAttribValueAttribValueAttribValueAttribValueattribValue den Wert des Parameters. Die folgende Beschreibung beschreibt für die möglichen Parametern alle unterstützten Werte:

''""""""""""

der leere String setzt die Standardattribute.

'type'"type""type""type""type""type"

spezifiziert das Verhalten eines Mutexes, wenn ein Thread versucht einen bereits gesperrten Mutex zu besitzen:

'sleep'"sleep""sleep""sleep""sleep""sleep"

unterbricht den aufrufenden Thread und legt ihn schlafen (Standard). Das Verhalten ist allerdings undefiniert, wenn der gesperrte Mutex bereits dem Thread gehört.

'spin'"spin""spin""spin""spin""spin"

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.

'recursive'"recursive""recursive""recursive""recursive""recursive"

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.

Parallelisierung

Parameter

AttribNameAttribNameAttribNameAttribNameAttribNameattribName (input_control)  number(-array) HTupleHTupleHTupleVARIANTHtuple (string / integer / real) (string / int / long / double) (HString / Hlong / double) (char* / Hlong / double) (BSTR / Hlong / double) (char* / Hlong / double)

Mutex-Attribut

Defaultwert: '' "" "" "" "" ""

Werteliste: ''"""""""""", 'type'"type""type""type""type""type"

AttribValueAttribValueAttribValueAttribValueAttribValueattribValue (input_control)  number(-array) HTupleHTupleHTupleVARIANTHtuple (string / integer / real) (string / int / long / double) (HString / Hlong / double) (char* / Hlong / double) (BSTR / Hlong / double) (char* / Hlong / double)

Mutex-Attributwert

Parameteranzahl: AttribValue == AttribName

Defaultwert: '' "" "" "" "" ""

Werteliste: ''"""""""""", 'recursive'"recursive""recursive""recursive""recursive""recursive", 'sleep'"sleep""sleep""sleep""sleep""sleep", 'spin'"spin""spin""spin""spin""spin"

MutexHandleMutexHandleMutexHandleMutexHandleMutexHandlemutexHandle (output_control)  mutex HMutex, HTupleHTupleHMutex, HTupleHMutexX, VARIANTHtuple (integer) (IntPtr) (Hlong) (Hlong) (Hlong) (Hlong)

Mutex-Synchronisationsobjekt

Ergebnis

Sind die Parameterwerte korrekt, dann liefert create_mutexcreate_mutexCreateMutexcreate_mutexCreateMutexCreateMutex den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Nachfolger

lock_mutexlock_mutexLockMutexlock_mutexLockMutexLockMutex, clear_mutexclear_mutexClearMutexclear_mutexClearMutexClearMutex

Siehe auch

clear_mutexclear_mutexClearMutexclear_mutexClearMutexClearMutex

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren