fonctions intrinsèques _InterlockedExchangePointer

Section spécifique à Microsoft

Effectue une opération d’échange atomique, qui copie l’adresse passée en tant que deuxième argument dans le premier argument et retourne l’adresse d’origine du premier.

Syntaxe

void * _InterlockedExchangePointer(
   void * volatile * Target,
   void * Value
);
void * _InterlockedExchangePointer_acq(
   void * volatile * Target,
   void * Value
);
void * _InterlockedExchangePointer_rel(
   void * volatile * Target,
   void * Value
);
void * _InterlockedExchangePointer_nf(
   void * volatile * Target,
   void * Value
);
void * _InterlockedExchangePointer_HLEAcquire(
   void * volatile * Target,
   void * Value
);
void * _InterlockedExchangePointer_HLERelease(
   void * volatile * Target,
   void * Value
);

Paramètres

Cible
[in, out] Pointeur vers le pointeur vers la valeur à échanger. La fonction définit la valeur sur Value et retourne sa valeur précédente.

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

Valeur retournée

La fonction retourne la valeur initiale pointée par Target.

Spécifications

Intrinsic Architecture En-tête
_InterlockedExchangePointer x86, ARM, x64, ARM64 <intrin.h>
_InterlockedExchangePointer_acq, , _InterlockedExchangePointer_rel_InterlockedExchangePointer_nf ARM, ARM64 <intrin.h>
_InterlockedExchangePointer_HLEAcquire, _InterlockedExchangePointer_HLERelease x64 <immintrin.h>

Sur l'architecture x86, _InterlockedExchangePointer est une macro qui appelle _InterlockedExchange.

Notes

Sur un système 64 bits, les paramètres sont 64 bits et doivent être alignés sur les limites 64 bits. Sinon, la fonction échoue. Sur un système 32 bits, les paramètres sont 32 bits et doivent être alignés sur les limites 32 bits. Pour plus d’informations, consultez Aligner.

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. L’intrinsèque avec un _nf suffixe (« sans clôture ») ne fait 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.

FIN de la section spécifique à Microsoft

Voir aussi

Intrinsèques du compilateur
Conflits avec le compilateur x86