fonctions intrinsèques _InterlockedExchangeAdd

Section spécifique à Microsoft

Fournissez la prise en charge intrinsèque du compilateur pour le SDK Windows Win32 _InterlockedExchangeAdd fonction de fonctions intrinsèques .

Syntaxe

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
);

Paramètres

Addend
[in, out] Valeur à ajouter ; remplacé par le résultat de l’ajout.

Valeur
[in] Valeur à ajouter.

Valeur retournée

La valeur de retour est la valeur initiale de la variable vers laquelle pointe le paramètre Addend.

Spécifications

Intrinsic Architecture En-tête
_InterlockedExchangeAdd, , _InterlockedExchangeAdd8_InterlockedExchangeAdd16 x86, ARM, x64, ARM64 <intrin.h>
_InterlockedExchangeAdd64 ARM, x64, ARM64 <intrin.h>
_InterlockedExchangeAdd_acq, , _InterlockedExchangeAdd_rel, _InterlockedExchangeAdd8_acq, , _InterlockedExchangeAdd8_nf_InterlockedExchangeAdd64_acq_InterlockedExchangeAdd64_rel_InterlockedExchangeAdd16_acq_InterlockedExchangeAdd16_nf_InterlockedExchangeAdd16_rel_InterlockedExchangeAdd8_rel_InterlockedExchangeAdd_nf_InterlockedExchangeAdd64_nf ARM, ARM64 <intrin.h>
_InterlockedExchangeAdd_HLEAcquire, _InterlockedExchangeAdd_HLERelease x86, x64 <immintrin.h>
_InterlockedExchangeAdd64_HLEAcquire, _InterlockedExchangeAdd64_HLErelease x64 <immintrin.h>

Notes

Il existe plusieurs variantes de _InterlockedExchangeAdd qui varient selon les types de données qu’elles impliquent et l’utilisation d’une sémantique acquire ou release spécifique au processeur.

La fonction _InterlockedExchangeAdd opère sur les valeurs entières de 32 bits, _InterlockedExchangeAdd8 sur les valeurs entières de 8 bits, _InterlockedExchangeAdd16 sur les valeurs entières de 16 bits et _InterlockedExchangeAdd64 sur les valeurs entières de 64 bits.

Sur les plateformes ARM, utilisez les fonctions intrinsèques avec des suffixes _acq et _rel si vous devez acquérir et libérer des éléments de la sémantique, comme le début et la fin d’une section critique. Les intrinsèques avec un _nf suffixe (« sans clôture ») ne font pas office de barrière de mémoire.

Sur les plateformes Intel qui prennent en charge les instructions HLE (Hardware Lock Elision), les fonctions intrinsèques avec les suffixes _HLEAcquire et _HLERelease comprennent une indication pour le processeur qui peut accélérer les performances en éliminant une étape d'écriture de verrou dans le matériel. Si ces intrinsèques sont appelées sur des plateformes qui ne prennent pas en charge HLE, l’indicateur est ignoré.

Ces routines sont disponibles seulement comme fonctions intrinsèques. Ils sont intrinsèques même quand /Oi ou #pragma intrinsèque est utilisé. Il n’est pas possible d’utiliser #pragma fonction sur ces intrinsèques.

Exemple

Pour obtenir un exemple d’utilisation _InterlockedExchangeAdd, consultez _InterlockedDecrement.

FIN de la section spécifique à Microsoft

Voir aussi

Intrinsèques du compilateur
Mots clés
Conflits avec le compilateur x86