Freigeben über


InitializeCriticalSection-Funktion (synchapi.h)

Initialisiert ein kritisches Abschnittsobjekt.

Syntax

void InitializeCriticalSection(
  [out] LPCRITICAL_SECTION lpCriticalSection
);

Parameter

[out] lpCriticalSection

Ein Zeiger auf das Kritische Abschnittsobjekt.

Rückgabewert

Diese Funktion gibt keinen Wert zurück.

Windows Server 2003 und Windows XP: In Situationen mit wenig Arbeitsspeicher kann InitializeCriticalSection eine STATUS_NO_MEMORY Ausnahme auslösen. Ab Windows Vista wurde diese Ausnahme beseitigt, und InitializeCriticalSection ist immer erfolgreich, auch in Situationen mit wenig Arbeitsspeicher.

Hinweise

Die Threads eines einzelnen Prozesses können ein kritisches Abschnittsobjekt für die Synchronisierung mit gegenseitigem Ausschluss verwenden. Es gibt keine Garantie für die Reihenfolge, in der Threads den Besitz des kritischen Abschnitts erhalten, aber das System ist für alle Threads fair.

Der Prozess ist für die Zuweisung des von einem kritischen Abschnittsobjekt verwendeten Arbeitsspeichers verantwortlich. Dies kann durch Deklarieren einer Variablen vom Typ CRITICAL_SECTION. Vor der Verwendung eines kritischen Abschnitts muss ein Thread des Prozesses das -Objekt initialisieren.

Nachdem ein kritisches Abschnittsobjekt initialisiert wurde, können die Threads des Prozesses das Objekt in der Funktion EnterCriticalSection, TryEnterCriticalSection oder LeaveCriticalSection angeben, um gegenseitig ausschließenden Zugriff auf eine freigegebene Ressource zu ermöglichen. Verwenden Sie für eine ähnliche Synchronisierung zwischen den Threads verschiedener Prozesse ein Mutex-Objekt.

Ein kritisches Abschnittsobjekt kann nicht verschoben oder kopiert werden. Der Prozess darf auch das Objekt nicht ändern, sondern muss es als logisch undurchsichtig behandeln. Verwenden Sie nur die Funktionen für kritische Abschnitte, um kritische Abschnittsobjekte zu verwalten. Wenn Sie die Verwendung des kritischen Abschnitts abgeschlossen haben, rufen Sie die DeleteCriticalSection-Funktion auf .

Ein kritisches Abschnittsobjekt muss gelöscht werden, bevor es neu initialisiert werden kann. Das Initialisieren eines kritischen Abschnitts, der bereits initialisiert wurde, führt zu nicht definiertem Verhalten.

Anforderungen

Anforderung Wert
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 (enthalten 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

CreateMutex

Kritische Abschnittsobjekte

DeleteCriticalSection

EnterCriticalSection

InitializeCriticalSectionAndSpinCount

LeaveCriticalSection

Synchronisierungsfunktionen

TryEnterCriticalSection

In VBS-Enclaves verfügbare Vertdll-APIs