Funções intrínsecas _InterlockedExchangeAdd
Seção específica da Microsoft
Dê suporte intrínseco do compilador a funções intrínsecas _InterlockedExchangeAdd do SDK do Windows para Win32.
Sintaxe
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
Addend
[in, out] O valor a ser adicionado; substituído pelo resultado da adição.
Valor
[in] O valor a ser adicionado.
Valor retornado
O valor retornado é o valor inicial da variável que aponta para o parâmetro Addend
.
Requisitos
Intrinsic | Arquitetura | Cabeçalho |
---|---|---|
_InterlockedExchangeAdd , _InterlockedExchangeAdd8 , _InterlockedExchangeAdd16 |
x86, ARM, x64, ARM64 | <intrinca.h> |
_InterlockedExchangeAdd64 |
ARM, x64, ARM64 | <intrinca.h> |
_InterlockedExchangeAdd_acq , _InterlockedExchangeAdd_rel , _InterlockedExchangeAdd_nf , _InterlockedExchangeAdd8_acq , _InterlockedExchangeAdd8_rel _InterlockedExchangeAdd16_nf _InterlockedExchangeAdd8_nf _InterlockedExchangeAdd64_rel _InterlockedExchangeAdd16_acq _InterlockedExchangeAdd16_rel _InterlockedExchangeAdd64_acq ,_InterlockedExchangeAdd64_nf |
ARM, ARM64 | <intrinca.h> |
_InterlockedExchangeAdd_HLEAcquire , _InterlockedExchangeAdd_HLERelease |
x86, x64 | <immintrin.h> |
_InterlockedExchangeAdd64_HLEAcquire , _InterlockedExchangeAdd64_HLErelease |
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 sem suporte para HLE, a dica será ignorada.
Essas rotinas somente estão disponíveis como intrínsecos. Eles são intrínsecos mesmo quando /Oi ou o intrínseco #pragma é usado. Não é possível usar a função #pragma nesses intrínsecos.
Exemplo
Para obter uma amostra de como usar _InterlockedExchangeAdd
, consulte _InterlockedDecrement.
Fim da seção específica da Microsoft
Confira também
Intrínsecos do compilador
Palavras-chave
conflitos com o compilador x86