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 .
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
InterlockedCompareExchange16Acquire
InterlockedCompareExchange16NoFence
InterlockedCompareExchange16Release
InterlockedCompareExchangeAcquire
InterlockedCompareExchangeAcquire64
InterlockedCompareExchangeNoFence
InterlockedCompareExchangeNoFence64
InterlockedCompareExchangePointer
InterlockedCompareExchangePointerAcquire
InterlockedCompareExchangePointerNoFence
InterlockedCompareExchangePointerRelease
InterlockedCompareExchangeRelease