Compartilhar via


Função InterlockedCompareExchange (wdm.h)

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

Sintaxe

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

Parâmetros

[in, out] Destination

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

[in] ExChange

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

[in] 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 Comperand for igual a *Destination, então *Destination é definido como igual 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 Comperand, 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 wdm.h (include 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