Compartilhar via


Função InterlockedCompareExchange (miniport.h)

A rotina InterlockedCompareExchange executa uma operação atômica que compara o valor de entrada apontado por de Destino com o valor de Comparand.

Sintaxe

LONG InterlockedCompareExchange(
  [in, out] LONG volatile *Destination,
            LONG          ExChange,
            LONG          Comperand
);

Parâmetros

[in, out] Destination

Um ponteiro para o valor de entrada que é comparado com o valor de Comparand.

ExChange

Especifica o valor de saída apontado por Destino se o valor de entrada apontado por Destination for igual ao valor de Comparand.

Comperand

Especifica o valor que é comparado com o valor de entrada apontado pelo Destination.

Valor de retorno

InterlockedCompareExchange retorna o valor original de *Destination.

Observações

Se Comparand for igual a *Destination, então *Destination é definido como igual a Exchange. Caso contrário, * de destino não mudará.

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

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

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

Requisitos

Requisito Valor
de cliente com suporte mínimo Disponível a partir do Windows 2000.
da Plataforma de Destino Universal
cabeçalho miniport.h (incluem Wdm.h, Ntddk.h, Ntifs.h, Miniport.h)
biblioteca OneCoreUAP.lib no Windows 10
IRQL Qualquer nível

Consulte também

exInterlockedCompareExchange64

InterlockedCompareExchangePointer

InterlockedDecrement

InterlockedExchange

InterlockedExchangePointer

InterlockedIncrement