Funções intrínsecas _InterlockedCompareExchangePointer
Específico da Microsoft
Executa uma operação atômica que armazena o endereço do Exchange no endereço Destination se os endereços Comparand e Destination forem iguais.
void * _InterlockedCompareExchangePointer ( void * volatile * Destination, void * Exchange, void * Comparand ); void * _InterlockedCompareExchangePointer_acq ( void * volatile * Destination, void * Exchange, void * Comparand ); void * _InterlockedCompareExchangePointer_HLEAcquire ( void * volatile * Destination, void * Exchange, void * Comparand ); void * _InterlockedCompareExchangePointer_HLERelease ( void * volatile * Destination, void * Exchange, void * Comparand ); void * _InterlockedCompareExchangePointer_nf ( void * volatile * Destination, void * Exchange, void * Comparand ); void * _InterlockedCompareExchangePointer_np ( void * volatile * Destination, void * Exchange, void * Comparand ); long _InterlockedCompareExchangePointer_rel ( void * volatile * Destination, void * Exchange, void * Comparand );
Parâmetros
[in, out] Destination
Ponteiro para um ponteiro do valor de destino. O sinal é ignorado.[in] Exchange
Ponteiro do Exchange. O sinal é ignorado.[in] Comparand
Ponteiro a ser comparado ao destino. O sinal é ignorado.
Valor de retorno
O valor de retorno é o valor inicial do destino.
Requisitos
Intrínseco |
Arquitetura |
Cabeçalho |
---|---|---|
_InterlockedCompareExchangePointer |
x86, ARM, x64 |
<intrin.h> |
_InterlockedCompareExchangePointer_acq, _InterlockedCompareExchangePointer_nf, _InterlockedCompareExchangePointer_rel |
ARM |
<iiintrin.h> |
_InterlockedCompareExchangePointer_HLEAcquire, _InterlockedCompareExchangePointer_HLERelease |
x86, x64 |
<immintrin.h> |
Comentários
_InterlockedCompareExchangePointer realiza uma comparação atômica do endereço Destination com o endereço Comparand. Se o endereço Destination for igual ao endereço Comparand, o endereço Exchange será armazenado no endereço especificado pelo Destination. Caso contrário, nenhuma operação será executada.
_InterlockedCompareExchangePointer fornece suporte intrínseco ao compilador da função Win32 Windows SDK _InterlockedCompareExchangePointer.
Para obter um exemplo de como usar _InterlockedCompareExchangePointer, consulte _InterlockedDecrement.
Em plataformas ARM, use intrínsecos com os sufixos _acq e _rel para semântica de aquisição e liberação, como no início e no final de uma seção crítica. Os intrínsecos de ARM com um sufixo _nf ("no fence") não funcionam como uma barreira de memória.
Intrínsecos com um sufixo _np ("no prefetch") impedem que uma possível operação de pré-busca seja inserida pelo compilador.
Em plataformas Intel que suportam instruções HLE (Elisão de Bloqueio de Hardware), intrínsecos com os sufixos _HLEAcquire e _HLERelease incluem uma dica para o processador que pode acelerar o desempenho, eliminando uma etapa de gravação de bloqueio no hardware. Se esses intrínsecos forem chamados em plataformas que não dão suporte a HLE, a dica será ignorada.
Essas rotinas somente estão disponíveis como intrínsecos.