Função InterlockedCompareExchangePointer (miniport.h)

A rotina InterlockedCompareExchangePointer executa uma operação atômica que compara o valor do ponteiro de entrada apontado por Destination com o valor do ponteiro Comparand.

Sintaxe

PVOID InterlockedCompareExchangePointer(
  [in, out] PVOID volatile *Destination,
  [in]      PVOID          Exchange,
            PVOID          Comperand
);

Parâmetros

[in, out] Destination

Um ponteiro para um valor PVOID. Se (*Destino) = Comparand, a rotina definirá (*Destino) como Exchange.

[in] Exchange

Especifica o valor PVOID para o qual definir (*Destino).

Comperand

Especifica o valor PVOID a ser comparado com (**Destination*).

Retornar valor

InterlockedCompareExchangePointer retorna o valor original do ponteiro em *Destination (ou seja, o valor desse ponteiro na entrada para a rotina).

Comentários

Se Comparand for igual a *Destination, *Destination será definido como igual ao Exchange. Caso contrário, *O destino não será alterado.

InterlockedCompareExchangePointer fornece uma maneira rápida e atômica de sincronizar o teste e a atualização de uma variável de ponteiro que é compartilhada por vários threads. Se o valor de entrada apontado por Destination for igual ao valor de Comparand, o valor apontado por Destination será definido como o valor do Exchange.

InterlockedCompareExchangePointer foi projetado para velocidade e, normalmente, é implementado embutido por um compilador. InterlockedCompareExchangePointer é atômico apenas em relação a outras chamadas Xxx interlocked. Ele não usa um bloqueio de rotação e pode ser usado com segurança em dados pagináveis.

A rotina InterlockedCompareExchangePointer é atômica apenas em relação a outras chamadasXxx interlocked.

As operações interligadas não podem ser usadas na memória não armazenada em cache.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível a partir do Windows 2000.
Plataforma de Destino Área de Trabalho
Cabeçalho miniport.h (incluem Wdm.h, Ntddk.h, Ntifs.h, Miniport.h)
IRQL Qualquer nível

Confira também

Interlockedcompareexchange

InterlockedExchange

InterlockedExchangePointer