Compartilhar via


Função ExInitializePushLock (wdm.h)

Inicializa uma variável de bloqueio de push.

Sintaxe

void ExInitializePushLock(
  [Out] PEX_PUSH_LOCK PushLock
);

Parâmetros

[Out] PushLock

Ponteiro para o armazenamento fornecido pelo chamador, que deve ser pelo menos o valor de sizeof(EX_PUSH_LOCK), para que a variável de bloqueio de push seja inicializada. O armazenamento deve estar alinhado a 4 bytes em plataformas de 32 bits e alinhado a 8 bytes em plataformas de 64 bits.

Retornar valor

Nenhum

Comentários

Os bloqueios por push são semelhantes às estruturas ERESOURCE (também chamadas de "recursos") das seguintes maneiras:

  • Bloqueios por push podem ser usados para sincronização por um conjunto de threads.
  • Bloqueios por push podem ser adquiridos para acesso compartilhado ou exclusivo.
  • Embora o chamador forneça o armazenamento para a variável de bloqueio de push, a estrutura EX_PUSH_LOCK é opaca: ou seja, seus membros são reservados para uso do sistema.

Os bloqueios por push oferecem as seguintes vantagens em relação às estruturas ERESOURCE:

  • Quando os bloqueios de push são adquiridos principalmente para acesso compartilhado, eles são mais eficientes do que as estruturas ERESOURCE.
  • O armazenamento para bloqueios de push pode ser alocado do pool paginado ou nãopagado. As estruturas ERESOURCE devem ser alocadas somente do pool nãopagado.
  • EX_PUSH_LOCK estruturas são muito menores do que as estruturas ERESOURCE.

Os bloqueios de push têm as seguintes desvantagens quando comparados com as estruturas ERESOURCE:

  • O algoritmo para conceder acesso exclusivo não é justo para todos os threads. Se houver um alto nível de contenção de bloqueio exclusivo, não haverá garantia sobre a ordem em que os threads receberão acesso exclusivo.
  • Não há rotinas de suporte para determinar o proprietário atual de um bloqueio de push. (Os usuários de estruturas ERESOURCE podem chamar rotinas como ExIsResourceAcquiredExclusiveLite para determinar se o thread atual tem acesso exclusivo ao recurso.)
  • Bloqueios de push não podem ser adquiridos recursivamente.

Para adquirir ou liberar um bloqueio de push para acesso exclusivo, chame ExAcquirePushLockExclusive ou ExReleasePushLockExclusive, respectivamente.

Para adquirir ou liberar um bloqueio de push para acesso compartilhado, chame ExAcquirePushLockShared ou ExReleasePushLockShared, respectivamente.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 10, versão 1809
Cabeçalho wdm.h