Partager via


fonctions intrinsèques _InterlockedExchange

Section spécifique à Microsoft

Génère une instruction atomique pour définir une valeur spécifiée.

Syntaxe

long _InterlockedExchange(
   long volatile * Target,
   long Value
);
long _InterlockedExchange_acq(
   long volatile * Target,
   long Value
);
long _InterlockedExchange_HLEAcquire(
   long volatile * Target,
   long Value
);
long _InterlockedExchange_HLERelease(
   long volatile * Target,
   long Value
);
long _InterlockedExchange_nf(
   long volatile * Target,
   long Value
);
long _InterlockedExchange_rel(
   long volatile * Target,
   long Value
);
char _InterlockedExchange8(
   char volatile * Target,
   char Value
);
char _InterlockedExchange8_acq(
   char volatile * Target,
   char Value
);
char _InterlockedExchange8_nf(
   char volatile * Target,
   char Value
);
char _InterlockedExchange8_rel(
   char volatile * Target,
   char Value
);
short _InterlockedExchange16(
   short volatile * Target,
   short Value
);
short _InterlockedExchange16_acq(
   short volatile * Target,
   short Value
);
short _InterlockedExchange16_nf(
   short volatile * Target,
   short Value
);
short _InterlockedExchange16_rel(
   short volatile * Target,
   short Value
);
__int64 _InterlockedExchange64(
   __int64 volatile * Target,
   __int64 Value
);
__int64 _InterlockedExchange64_acq(
   __int64 volatile * Target,
   __int64 Value
);
__int64 _InterlockedExchange64_HLEAcquire(
   __int64 volatile * Target,
   __int64 Value
);
__int64 _InterlockedExchange64_HLERelease(
   __int64 volatile * Target,
   __int64 Value
);
__int64 _InterlockedExchange64_nf(
   __int64 volatile * Target,
   __int64 Value
);
__int64 _InterlockedExchange64_rel(
   __int64 volatile * Target,
   __int64 Value
);

Paramètres

Cible
[in, out] Pointeur vers la valeur à échanger. La fonction affecte à cette variable la valeur Value et retourne sa valeur précédente.

Valeur
[in] Valeur à échanger avec la valeur pointée par Target.

Valeur retournée

Retourne la valeur initiale pointée par Target.

Spécifications

Intrinsic Architecture En-tête
_InterlockedExchange, _InterlockedExchange8, _InterlockedExchange16 x86, ARM, x64, ARM64 <intrin.h>
_InterlockedExchange64 ARM, x64, ARM64 <intrin.h>
_InterlockedExchange_acq, _InterlockedExchange_nf, _InterlockedExchange_rel, _InterlockedExchange8_acq, _InterlockedExchange8_nf, _InterlockedExchange8_rel, _InterlockedExchange16_acq, _InterlockedExchange16_nf, _InterlockedExchange16_rel, _InterlockedExchange64_acq, _InterlockedExchange64_nf, _InterlockedExchange64_rel, ARM, ARM64 <intrin.h>
_InterlockedExchange_HLEAcquire, _InterlockedExchange_HLERelease x86, x64 <immintrin.h>
_InterlockedExchange64_HLEAcquire, _InterlockedExchange64_HLERelease x64 <immintrin.h>

Notes

_InterlockedExchangefournit la prise en charge intrinsèque du compilateur pour la fonction InterlockedExchange du SDK Windows Win32.

Il existe plusieurs variantes de _InterlockedExchange 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 _InterlockedExchange opère sur les valeurs entières de 32 bits, _InterlockedExchange8 sur les valeurs entières de 8 bits, _InterlockedExchange16 sur les valeurs entières de 16 bits et _InterlockedExchange64 sur les valeurs entières de 64 bits.

Sur les plateformes ARM, utilisez les intrinsèques avec les suffixes _acq et _rel pour la sémantique Acquire et Release, comme au 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 fonctions intrinsèques sont appelées sur des plateformes qui ne prennent pas en charge HLE, l'indication est ignorée.

Ces routines sont disponibles seulement comme fonctions intrinsèques.

Exemple

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

FIN de la section spécifique à Microsoft

Voir aussi

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