Función ExInitializePushLock (wdm.h)

Inicializa una variable de bloqueo de inserción.

Sintaxis

void ExInitializePushLock(
  [Out] PEX_PUSH_LOCK PushLock
);

Parámetros

[Out] PushLock

Puntero al almacenamiento proporcionado por el autor de la llamada, que debe ser al menos el valor de sizeof(EX_PUSH_LOCK), para que se inicialice la variable de bloqueo de inserción. El almacenamiento debe estar alineado con 4 bytes en plataformas de 32 bits y 8 bytes alineados en plataformas de 64 bits.

Valor devuelto

None

Observaciones

Los bloqueos de inserción son similares a las estructuras ERESOURCE (también denominadas "recursos") de las siguientes maneras:

  • Los bloqueos de inserción se pueden usar para la sincronización mediante un conjunto de subprocesos.
  • Los bloqueos de inserción se pueden adquirir para el acceso compartido o exclusivo.
  • Aunque el autor de la llamada proporciona el almacenamiento para la variable de bloqueo de inserción, la estructura EX_PUSH_LOCK es opaca: es decir, sus miembros están reservados para uso del sistema.

Los bloqueos de inserción ofrecen las siguientes ventajas sobre las estructuras ERESOURCE:

  • Cuando los bloqueos de inserción se adquieren principalmente para el acceso compartido, son más eficientes que las estructuras ERESOURCE.
  • El almacenamiento para bloqueos de inserción se puede asignar desde un grupo paginado o no paginado. Las estructuras ERESOURCE solo se deben asignar desde un grupo no paginado.
  • EX_PUSH_LOCK estructuras son mucho más pequeñas que las estructuras ERESOURCE.

Los bloqueos de inserción tienen las siguientes desventajas en comparación con las estructuras ERESOURCE:

  • El algoritmo para conceder acceso exclusivo no es justo para todos los subprocesos. Si hay un alto nivel de contención de bloqueo exclusivo, no hay ninguna garantía sobre el orden en que se concederá acceso exclusivo a los subprocesos.
  • No hay rutinas de soporte técnico para determinar el propietario actual de un bloqueo de inserción. (Los usuarios de estructuras ERESOURCE pueden llamar a rutinas como ExIsResourceAcquiredExclusiveLite para determinar si el subproceso actual tiene acceso exclusivo al recurso).
  • Los bloqueos de inserción no se pueden adquirir de forma recursiva.

Para adquirir o liberar un bloqueo de inserción para el acceso exclusivo, llame a ExAcquirePushLockExclusive o ExReleasePushLockExclusive, respectivamente.

Para adquirir o liberar un bloqueo de inserción para el acceso compartido, llame a ExAcquirePushLockShared o ExReleasePushLockShared, respectivamente.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 10, versión 1809
Encabezado wdm.h