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