Teilen über


CMutex-Klasse

Stellt einen "mutex" dar – ein Synchronisierungsobjekt, das einen Thread sich gegenseitig ausschließenden Zugriff auf eine Ressource ermöglicht.

Syntax

class CMutex : public CSyncObject

Member

Öffentliche Konstruktoren

Name Beschreibung
CMutex::CMutex Erstellt ein CMutex-Objekt.

Hinweise

Mutexes sind nützlich, wenn jeweils nur ein Thread daten oder eine andere kontrollierte Ressource ändern darf. Beispielsweise ist das Hinzufügen von Knoten zu einer verknüpften Liste ein Prozess, der nur jeweils von einem Thread zulässig sein sollte. Durch Die Verwendung eines CMutex Objekts zum Steuern der verknüpften Liste kann jeweils nur ein Thread Zugriff auf die Liste erhalten.

Um ein CMutex Objekt zu verwenden, erstellen Sie das CMutex Objekt bei Bedarf. Geben Sie den Namen des Mutex an, auf den Sie warten möchten, und geben Sie an, dass die Anwendung sie ursprünglich besitzen soll. Sie können dann auf den Mutex zugreifen, wenn der Konstruktor zurückgegeben wird. Rufen Sie CSyncObject::Unlock auf, wenn Sie mit dem Zugriff auf die kontrollierte Ressource fertig sind.

Eine alternative Methode zum Verwenden von CMutex Objekten besteht darin, der Klasse, die Sie steuern möchten, eine Variable vom Typ CMutex als Datenmememm hinzuzufügen. Rufen Sie beim Erstellen des gesteuerten Objekts den Konstruktor des CMutex Datenmemems auf, der angibt, ob der Mutex ursprünglich gehört, den Namen des Mutex (falls es über Prozessgrenzen hinweg verwendet wird) und die gewünschten Sicherheitsattribute.

Um auf Ressourcen zuzugreifen, die von CMutex Objekten auf diese Weise gesteuert werden, erstellen Sie zuerst eine Variable vom Typ "CSingleLock " oder " CMultiLock " in der Access-Memberfunktion Ihrer Ressource. Rufen Sie dann die Memberfunktion des Sperrobjekts Lock auf (z . B. CSingleLock::Lock). An diesem Punkt erhält Ihr Thread entweder Zugriff auf die Ressource, wartet auf die Freigabe der Ressource und erhält Zugriff, oder warten Sie, bis die Ressource freigegeben und timeout ist, wenn sie keinen Zugriff auf die Ressource erhält. In jedem Fall wurde auf Ihre Ressource auf threadsichere Weise zugegriffen. Verwenden Sie zum Freigeben der Ressource die Memberfunktion des Sperrobjekts Unlock (z . B. CSingleLock::Unlock), oder lassen Sie zu, dass das Sperrobjekt aus dem Bereich fällt.

Weitere Informationen zur Verwendung von CMutex Objekten finden Sie im Artikel Multithreading: Verwenden der Synchronisierungsklassen.

Vererbungshierarchie

CObject

CSyncObject

CMutex

Anforderungen

Kopfzeile: afxmt.h

CMutex::CMutex

Erstellt ein benanntes oder nicht benanntes CMutex Objekt.

CMutex(
    BOOL bInitiallyOwn = FALSE,
    LPCTSTR lpszName = NULL,
    LPSECURITY_ATTRIBUTES lpsaAttribute = NULL);

Parameter

bInitiallyOwn
Gibt an, ob der Thread, der das CMutex Objekt erstellt, zunächst Zugriff auf die ressource hat, die vom Mutex gesteuert wird.

lpszName
Name des CMutex-Objekts. Wenn ein anderer Mutex mit demselben Namen vorhanden ist, muss lpszName angegeben werden, wenn das Objekt über Prozessgrenzen hinweg verwendet wird. Wenn NULL, wird der Mutex unbenannt. Wenn der Name einem vorhandenen Mutex entspricht, erstellt der Konstruktor ein neues CMutex Objekt, das auf den Mutex dieses Namens verweist. Wenn der Name einem vorhandenen Synchronisierungsobjekt entspricht, das kein Mutex ist, schlägt die Konstruktion fehl.

lpsaAttribute
Sicherheitsattribute für das Mutex-Objekt. Eine vollständige Beschreibung dieser Struktur finden Sie unter SECURITY_ATTRIBUTES im Windows SDK.

Hinweise

Um auf ein CMutex Objekt zuzugreifen oder freizugeben, erstellen Sie ein CMultiLock- oder CSingleLock-Objekt, und rufen Sie dessen Lock- und Unlock-Memberfunktionen auf. Wenn das CMutex Objekt eigenständig verwendet wird, rufen Sie dessen Unlock Memberfunktion auf, um es freizugeben.

Wichtig

Verwenden Sie nach dem Erstellen des CMutex Objekts GetLastError, um sicherzustellen, dass der Mutex noch nicht vorhanden war. Wenn der Mutex unerwartet vorhanden ist, kann es darauf hindeuten, dass ein nicht autorisierter Prozess gleicht und möglicherweise beabsichtigt, den Mutex böswillig zu verwenden. In diesem Fall besteht die empfohlene sicherheitsbewusste Prozedur darin, das Handle zu schließen und fortzusetzen, als ob beim Erstellen des Objekts ein Fehler aufgetreten wäre.

Siehe auch

CSyncObject-Klasse
Hierarchiediagramm