ExInitializePushLock-Funktion (wdm.h)

Initialisiert eine Pushsperrvariable.

Syntax

void ExInitializePushLock(
  [Out] PEX_PUSH_LOCK PushLock
);

Parameter

[Out] PushLock

Zeiger auf den vom Aufrufer bereitgestellten Speicher, der mindestens dem Wert von sizeof(EX_PUSH_LOCK) entspricht, damit die zu initialisierende Pushsperre-Variable initialisiert wird. Der Speicher muss 4-Byte auf 32-Bit-Plattformen ausgerichtet und 8 Byte auf 64-Bit-Plattformen ausgerichtet sein.

Rückgabewert

Keine

Bemerkungen

Pushsperren ähneln ERESOURCE-Strukturen (auch als "Ressourcen" bezeichnet) auf folgende Weise:

  • Pushsperren können für die Synchronisierung von einer Gruppe von Threads verwendet werden.
  • Pushsperren können für freigegebenen oder exklusiven Zugriff erworben werden.
  • Obwohl der Aufrufer den Speicher für die Pushsperrvariable bereitstellt, ist die EX_PUSH_LOCK-Struktur undurchsichtig: Die Member sind für die Systemverwendung reserviert.

Pushsperren bieten die folgenden Vorteile gegenüber ERESOURCE-Strukturen:

  • Wenn Pushsperren meist für den gemeinsamen Zugriff erworben werden, sind sie effizienter als ERESOURCE-Strukturen.
  • Der Speicher für Pushsperren kann aus einem ausgelagerten oder nicht ausgelagerten Pool zugeordnet werden. ERESOURCE-Strukturen dürfen nur aus einem nicht auslagerten Pool zugeordnet werden.
  • EX_PUSH_LOCK Strukturen sind viel kleiner als ERESOURCE-Strukturen.

Pushsperren haben im Vergleich zu ERESOURCE-Strukturen die folgenden Nachteile:

  • Der Algorithmus zum Gewähren des exklusiven Zugriffs ist nicht für alle Threads fair. Wenn ein hoher Grad an Exklusivsperrkonflikten besteht, gibt es keine Garantie für die Reihenfolge, in der Threads exklusiver Zugriff gewährt wird.
  • Es gibt keine Unterstützungsroutinen zum Ermitteln des aktuellen Besitzers einer Pushsperre. (Benutzer von ERESOURCE-Strukturen können Routinen wie ExIsResourceAcquiredExclusiveLite aufrufen, um zu bestimmen, ob der aktuelle Thread exklusiven Zugriff auf die Ressource hat.)
  • Pushsperren können nicht rekursiv abgerufen werden.

Um eine Pushsperre für exklusiven Zugriff zu erhalten oder freizugeben, rufen Sie ExAcquirePushLockExclusive bzw . ExReleasePushLockExclusive auf.

Um eine Pushsperre für den gemeinsamen Zugriff zu erwerben oder freizugeben, rufen Sie ExAcquirePushLockShared bzw . ExReleasePushLockShared auf.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 10, Version 1809
Kopfzeile wdm.h