Freigeben über


ExInitializePushLock-Funktion (wdm.h)

Initialisiert eine Pushsperrvariable.

Syntax

void ExInitializePushLock(
  [Out] PEX_PUSH_LOCK PushLock
);

Parameter

[Out] PushLock

Zeigen Sie auf den vom Aufrufer bereitgestellten Speicher, der mindestens den Wert von sizeof(EX_PUSH_LOCK) aufweisen muss, damit die Pushsperrvariable initialisiert werden kann. Der Speicher muss auf 32-Bit-Plattformen ausgerichtet sein und 8-Byte auf 64-Bit-Plattformen ausgerichtet sein.

Rückgabewert

Nichts

Bemerkungen

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

  • Pushsperren können für die Synchronisierung durch eine Reihe 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: d. h. die Member sind für die Systemverwendung reserviert.

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

  • Wenn Pushsperren hauptsächlich für den freigegebenen Zugriff erworben werden, sind sie effizienter als ERESOURCE-Strukturen.
  • Der Speicher für Pushsperren kann aus dem ausgelagerten oder nicht ausgelagerten Pool zugewiesen werden. ERESOURCE-Strukturen dürfen nur aus nicht seitengebundenen Pools zugeordnet werden.
  • EX_PUSH_LOCK Strukturen sind wesentlich kleiner als ERESOURCE-Strukturen.

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

  • Der Algorithmus zum Gewähren des exklusiven Zugriffs ist nicht für alle Threads fair. Wenn es ein hohes Maß an exklusiven Sperren-Inhalten gibt, gibt es keine Garantie für die Reihenfolge, in der Threads exklusiven Zugriff gewährt werden.
  • Es gibt keine Supportroutinen zum Ermitteln des aktuellen Besitzers einer Pushsperre. (Benutzer von ERESOURCE-Strukturen können Routinen wie ExIsResourceAcquiredExclusiveLite aufrufen, um festzustellen, ob der aktuelle Thread exklusiven Zugriff auf die Ressource hat.)
  • Pushsperren können nicht rekursiv abgerufen werden.

Rufen Sie ExAcquirePushLockExclusive oder ExReleasePushLockExclusiveauf, um eine Pushsperre für exklusiven Zugriff zu erwerben oder freizugeben.

Rufen Sie ExAcquirePushLockShared oder ExReleasePushLockSharedauf, um eine Pushsperre für den freigegebenen Zugriff zu erwerben oder freizugeben.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows 10, Version 1809
Header- wdm.h