Função ExInitializePushLock (wdm.h)
Inicializa uma variável de bloqueio por 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 por push seja inicializada. O armazenamento deve ser alinhado de 4 bytes em plataformas de 32 bits e alinhado de 8 bytes em plataformas de 64 bits.
Valor de retorno
Nenhum
Observações
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 por push, a estrutura de 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 por push pode ser alocado do pool de páginas ou nãopagados. 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 por 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 por push. (Os usuários de estruturas ERESOURCE podem chamar rotinas como ExIsResourceAcquiredExclusiveLite para determinar se o thread atual tem acesso exclusivo ao recurso.)
- Não é possível adquirir bloqueios por push recursivamente.
Para adquirir ou liberar um bloqueio por push para acesso exclusivo, chame ExAcquirePushLockExclusive ou ExReleasePushLockExclusive, respectivamente.
Para adquirir ou liberar um bloqueio por push para acesso compartilhado, chame ExAcquirePushLockShared ou ExReleasePushLockShared, respectivamente.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Windows 10, versão 1809 |
cabeçalho | wdm.h |