TryEnterCriticalSection-Funktion (synchapi.h)

Versucht, einen kritischen Abschnitt ohne Blockierung zu betreten. Wenn der Aufruf erfolgreich ist, übernimmt der aufrufende Thread den Besitz des kritischen Abschnitts.

Syntax

BOOL TryEnterCriticalSection(
  [in, out] LPCRITICAL_SECTION lpCriticalSection
);

Parameter

[in, out] lpCriticalSection

Ein Zeiger auf das Objekt des kritischen Abschnitts.

Rückgabewert

Wenn der kritische Abschnitt erfolgreich eingegeben wurde oder der aktuelle Thread bereits den kritischen Abschnitt besitzt, ist der Rückgabewert nonzero.

Wenn ein anderer Thread bereits im Besitz des kritischen Abschnitts ist, ist der Rückgabewert 0.

Hinweise

Die Threads eines einzelnen Prozesses können ein kritisches Abschnittsobjekt für die Synchronisierung mit gegenseitigem Ausschluss verwenden. Der Prozess ist für die Zuweisung des von einem kritischen Abschnittsobjekt verwendeten Arbeitsspeichers verantwortlich, was durch Deklarieren einer Variablen vom Typ CRITICAL_SECTION möglich ist. Bevor Sie einen kritischen Abschnitt verwenden, muss ein Thread des Prozesses die Funktion InitializeCriticalSection oder InitializeCriticalSectionAndSpinCount aufrufen, um das Objekt zu initialisieren.

Um die sich gegenseitig ausschließende Verwendung einer freigegebenen Ressource zu ermöglichen, ruft jeder Thread die Funktion EnterCriticalSection oder TryEnterCriticalSection auf, um den Besitz des kritischen Abschnitts anzufordern, bevor ein Codeabschnitt ausgeführt wird, der die geschützte Ressource verwendet. Der Unterschied besteht darin, dass TryEnterCriticalSection sofort zurückgegeben wird, unabhängig davon, ob es den Besitz des kritischen Abschnitts erhalten hat, während EnterCriticalSection blockiert, bis der Thread den Besitz des kritischen Abschnitts übernehmen kann. Nach Abschluss der Ausführung des geschützten Codes verwendet der Thread die LeaveCriticalSection-Funktion , um den Besitz aufzugeben, sodass ein anderer Thread besitzer werden und Zugriff auf die geschützte Ressource erhalten kann. Der Thread muss LeaveCriticalSection einmal aufrufen, wenn er in den kritischen Abschnitt gelangt ist.

Jeder Thread des Prozesses kann die DeleteCriticalSection-Funktion verwenden, um die Systemressourcen freizugeben, die bei der Initialisierung des kritischen Abschnittsobjekts zugewiesen wurden. Nachdem diese Funktion aufgerufen wurde, kann das kritische Abschnittsobjekt nicht mehr für die Synchronisierung verwendet werden.

Wenn ein Thread beendet wird, während er den Besitz eines kritischen Abschnitts besitzt, ist der Zustand des kritischen Abschnitts nicht definiert.

Um eine Anwendung zu kompilieren, die diese Funktion verwendet, definieren Sie _WIN32_WINNT als 0x0400 oder höher. Weitere Informationen finden Sie unter Verwenden der Windows-Header.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows XP [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile synchapi.h (einschließlich Windows.h unter Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Bibliothek Kernel32.lib
DLL Kernel32.dll

Siehe auch

Objekte des kritischen Abschnitts

DeleteCriticalSection

EnterCriticalSection

InitializeCriticalSection

InitializeCriticalSectionAndSpinCount

LeaveCriticalSection

Synchronisierungsfunktionen

In VBS-Enklaven verfügbare Vertdll-APIs