Funções intrínsecas _InterlockedExchangeAdd
Específico da Microsoft
Dá suporte a compilador intrínseco para o Win32 Windows SDK Funções intrínsecas _InterlockedExchangeAdd função.
long _InterlockedExchangeAdd(
long volatile * Addend,
long Value
);
long _InterlockedExchangeAdd_acq(
long volatile * Addend,
long Value
);
long _InterlockedExchangeAdd_rel(
long volatile * Addend,
long Value
);
long _InterlockedExchangeAdd_nf(
long volatile * Addend,
long Value
);
long _InterlockedExchangeAdd_HLEAcquire(
long volatile * Addend,
long Value
);
long _InterlockedExchangeAdd_HLERelease(
long volatile * Addend,
long Value
);
char _InterlockedExchangeAdd8(
char volatile * Addend,
char Value
);
char _InterlockedExchangeAdd8_acq(
char volatile * Addend,
char Value
);
char _InterlockedExchangeAdd8_rel(
char volatile * Addend,
char Value
);
char _InterlockedExchangeAdd8_nf(
char volatile * Addend,
char Value
);
short _InterlockedExchangeAdd16(
short volatile * Addend,
short Value
);
short _InterlockedExchangeAdd16_acq(
short volatile * Addend,
short Value
);
short _InterlockedExchangeAdd16_rel(
short volatile * Addend,
short Value
);
short _InterlockedExchangeAdd16_nf(
short volatile * Addend,
short Value
);
__int64 _InterlockedExchangeAdd64(
__int64 volatile * Addend,
__int64 Value
);
__int64 _InterlockedExchangeAdd64_acq(
__int64 volatile * Addend,
__int64 Value
);
__int64 _InterlockedExchangeAdd64_rel(
__int64 volatile * Addend,
__int64 Value
);
__int64 _InterlockedExchangeAdd64_nf(
__int64 volatile * Addend,
__int64 Value
);
__int64 _InterlockedExchangeAdd64_HLEAcquire(
__int64 volatile * Addend,
__int64 Value
);
__int64 _InterlockedExchangeAdd64_HLERelease(
__int64 volatile * Addend,
__int64 Value
);
Parâmetros
[in, out] Addend
O valor a ser adicionado; substituído pelo resultado da adição.[in] Value
O valor a ser adicionado.
Valor de retorno
O valor retornado é o valor inicial da variável que aponta para o parâmetro Addend.
Requisitos
Intrínseco |
Arquitetura |
Cabeçalho |
---|---|---|
_InterlockedExchangeAdd, _InterlockedExchangeAdd8, _InterlockedExchangeAdd16, _InterlockedExchangeAdd64 |
x86, ARM, x64 |
<intrin.h> |
_InterlockedExchangeAdd_acq, _InterlockedExchangeAdd_rel, _InterlockedExchangeAdd_nf, _InterlockedExchangeAdd8_acq, _InterlockedExchangeAdd8_rel, _InterlockedExchangeAdd8_nf,_InterlockedExchangeAdd16_acq, _InterlockedExchangeAdd16_rel, _InterlockedExchangeAdd16_nf, _InterlockedExchangeAdd64_acq, _InterlockedExchangeAdd64_rel, _InterlockedExchangeAdd64_nf |
ARM |
<intrin.h> |
_InterlockedExchangeAdd_HLEAcquire, _InterlockedExchangeAdd_HLERelease, _InterlockedExchangeAdd64_HLEAcquire, _InterlockedExchangeAdd64_HLErelease |
x86, x64 |
<immintrin.h> |
Comentários
Há diversas variações em _InterlockedExchangeAdd que têm base no tipo de dados que envolvem e se a semântica acquire ou release é usada.
Enquanto a função _InterlockedExchangeAdd opera em valores inteiros de 32 bits, _InterlockedExchangeAdd8 opera em valores inteiros de 8 bits, _InterlockedExchangeAdd16 opera em valores inteiros de 16 bits e _InterlockedExchangeAdd64 opera em valores inteiros de 64 bits.
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 com um sufixo _nf ("no fence") não funcionam 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. Portanto, eles são intrínsecos, caso ou não os intrínsecos /Oi ou #pragma sejam usados. Não é possível usar a função #pragma nesses intrínsecos.
Exemplo
Para obter um exemplo de como usar _InterlockedExchangeAdd, consulte _InterlockedDecrement.