fonctions intrinsèques de _InterlockedExchangePointer
Section spécifique à Microsoft
Effectuer une opération d'échange atomique, qui copie l'adresse passée comme deuxième argument au premier et retourne l'adresse d'origine du premier.
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
[in, out] Target
Pointeur vers le pointeur vers la valeur à échanger. La fonction définit la valeur sur Value et retourne sa valeur précédente.[in] Value
Valeur à échanger avec la valeur pointée par Target.
Valeur de retour
La fonction renvoie la valeur initiale indiquée par Target.
Configuration requise
Intrinsèque |
Architecture |
Header |
---|---|---|
_InterlockedExchangePointer |
x86, ARM, x64 |
<intrin.h> |
_InterlockedExchangePointer_acq, _InterlockedExchangePointer_rel, _InterlockedExchangePointer_nf |
ARM |
<intrin.h> |
_InterlockedExchangePointer_HLEAcquire, _InterlockedExchangePointer_HLERelease |
x64 avec prise en charge HLE |
<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 ; dans le cas contraire, 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 align.
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. La fonction intrinsèque avec un suffixe _nf (pour « no fence », « pas de délimitation ») n'agit pas comme une barrière 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.