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