Função InterlockedCompareExchange (winnt.h)

Executa uma operação atômica de comparação e troca nos valores especificados. A função compara dois valores de 32 bits especificados e troca com outro valor de 32 bits com base no resultado da comparação.

Se você estiver trocando valores de ponteiro, essa função foi substituída pela função InterlockedCompareExchangePointer .

Para operar em valores de 64 bits, use a função InterlockedCompareExchange64 .

Sintaxe

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

Parâmetros

[in, out] Destination

Um ponteiro para o valor de destino.

[in] ExChange

O valor da troca.

[in] Comperand

O valor a ser comparado com Destino.

Valor retornado

A função retorna o valor inicial do parâmetro Destination .

Comentários

A função compara o valor destination com o valor Comparand . Se o valor destino for igual ao valor Comparand , o valor do Exchange será armazenado no endereço especificado por Destination. Caso contrário, nenhuma operação será executada.

Os parâmetros para essa função devem ser alinhados em um limite de 32 bits; caso contrário, a função se comportará de forma imprevisível em sistemas x86 multiprocessadores e em sistemas não x86. malloc, calloc, HeapAlloc e HeapReAlloc fornecem memória suficientemente alinhada.

As funções interligadas fornecem um mecanismo simples para sincronizar o acesso a uma variável que é compartilhada por vários threads. Essa função é atômica em relação a chamadas para outras funções interligadas.

Essa função é implementada usando um compilador intrínseco sempre que possível. Para obter mais informações, consulte o arquivo de cabeçalho WinBase.h e _InterlockedCompareExchange.

Essa função gera uma barreira de memória completa (ou limite) para garantir que as operações de memória sejam concluídas em ordem.

Sistemas baseados em Itanium: Para aplicativos críticos ao desempenho, use InterlockedCompareExchangeAcquire ou InterlockedCompareExchangeRelease .

Nota Essa função tem suporte em sistemas baseados em Windows RT.
 

Requisitos

   
Cliente mínimo com suporte Windows XP [aplicativos da área de trabalho | aplicativos UWP]
Servidor mínimo com suporte Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho winnt.h (inclua Windows.h)
Biblioteca Kernel32.lib
DLL Kernel32.dll

Confira também

Acesso a variáveis interligadas

InterlockedCompare64Exchange128

InterlockedCompareExchange128

InterlockedCompareExchange16

InterlockedCompareExchange16Acquire

InterlockedCompareExchange16NoFence

InterlockedCompareExchange16Release

InterlockedCompareExchange64

InterlockedCompareExchangeAcquire

InterlockedCompareExchangeAcquire64

InterlockedCompareExchangeNoFence

InterlockedCompareExchangeNoFence64

InterlockedCompareExchangePointer

InterlockedCompareExchangePointerAcquire

InterlockedCompareExchangePointerNoFence

InterlockedCompareExchangePointerRelease

InterlockedCompareExchangeRelease

InterlockedCompareExchangeRelease64

Funções de sincronização