Funções intrínsecas _InterlockedExchangePointer
Específico da Microsoft
Execute uma operação atômica de troca, que copia o endereço passado como o segundo argumento para o primeiro e retorna o endereço original do primeiro.
void * _InterlockedExchangePointer(
void * volatile * Target,
void * Value
);
void * _InterlockedExchangePointer_acq(
void * volatile * Target,
void * Value
);
void * _InterlockedExchangePointer_rel(
void * volatile * Target,
void * Value
);
void * _InterlockedExchangePointer_nf(
void * volatile * Target,
void * Value
);
void * _InterlockedExchangePointer_HLEAcquire(
void * volatile * Target,
void * Value
);
void * _InterlockedExchangePointer_HLERelease(
void * volatile * Target,
void * Value
);
Parâmetros
[in, out] Target
Ponteiro para o ponteiro do valor a ser trocado. A função define o valor como Value e retorna seu valor anterior.[in] Value
Valor a ser trocado pelo valor apontado pelo Target.
Valor de retorno
A função retorna o valor inicial apontado por Target.
Requisitos
Intrínseco |
Arquitetura |
Cabeçalho |
---|---|---|
_InterlockedExchangePointer |
x86, ARM, x64 |
<intrin.h> |
_InterlockedExchangePointer_acq, _InterlockedExchangePointer_rel, _InterlockedExchangePointer_nf |
ARM |
<intrin.h> |
_InterlockedExchangePointer_HLEAcquire, _InterlockedExchangePointer_HLERelease |
x64 com suporte a HLE |
<immintrin.h> |
Na arquitetura x86, _InterlockedExchangePointer é uma macro que chama _InterlockedExchange.
Comentários
Em um sistema de 64 bits, os parâmetros são 64 bits e devem estar alinhados em limites de 64 bits; caso contrário, a função falhará. Em um sistema de 32 bits, os parâmetros são de 32 bits em devem estar alinhados em limites de 32 bits. Para obter mais informações, consulte alinhar.
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. O intrínseco com um sufixo _nf ("no fence") não funciona como uma barreira de memória.
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.