fonctions intrinsèques _InterlockedCompareExchangePointer
Section spécifique à Microsoft
Effectue une opération atomique qui stocke l'adresse Exchange
dans l'adresse Destination
si les adresses Comparand
et Destination
sont égales.
Syntaxe
void * _InterlockedCompareExchangePointer (
void * volatile * Destination,
void * Exchange,
void * Comparand
);
void * _InterlockedCompareExchangePointer_acq (
void * volatile * Destination,
void * Exchange,
void * Comparand
);
void * _InterlockedCompareExchangePointer_HLEAcquire (
void * volatile * Destination,
void * Exchange,
void * Comparand
);
void * _InterlockedCompareExchangePointer_HLERelease (
void * volatile * Destination,
void * Exchange,
void * Comparand
);
void * _InterlockedCompareExchangePointer_nf (
void * volatile * Destination,
void * Exchange,
void * Comparand
);
void * _InterlockedCompareExchangePointer_np (
void * volatile * Destination,
void * Exchange,
void * Comparand
);
void * _InterlockedCompareExchangePointer_rel (
void * volatile * Destination,
void * Exchange,
void * Comparand
);
Paramètres
Destination
[in, out] Pointeur vers un pointeur vers la valeur de destination. Le signe est ignoré.
Exchange
[in] Pointeur Exchange. Le signe est ignoré.
Comparand
[in] Pointeur à comparer à la destination. Le signe est ignoré.
Valeur retournée
La valeur de retour est la valeur initiale de la destination.
Spécifications
Intrinsic | Architecture | En-tête |
---|---|---|
_InterlockedCompareExchangePointer |
x86, ARM, x64, ARM64 | <intrin.h> |
_InterlockedCompareExchangePointer_acq , , _InterlockedCompareExchangePointer_nf _InterlockedCompareExchangePointer_rel |
ARM, ARM64 | <iiintrin.h> |
_InterlockedCompareExchangePointer_HLEAcquire , _InterlockedCompareExchangePointer_HLERelease |
x86, x64 | <immintrin.h> |
Notes
_InterlockedCompareExchangePointer
effectue une comparaison atomique de l'adresse Destination
à l'adresse Comparand
. Si l'adresse Destination
est égale à l'adresse Comparand
, l'adresse Exchange
est stockée dans l'adresse spécifiée par Destination
. Dans le cas contraire, aucune opération n'est effectuée.
_InterlockedCompareExchangePointer
fournit la prise en charge intrinsèque du compilateur pour la fonction InterlockedCompareExchangePointer du SDK Windows Win32.
Pour obtenir un exemple d’utilisation _InterlockedCompareExchangePointer
, consultez _InterlockedDecrement.
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 ARM avec un _nf
suffixe (« sans clôture ») ne font pas office de barrière de mémoire.
Les fonctions intrinsèques avec un suffixe _np
(pour « no prefetch », « pas de prérécupération ») empêchent l'insertion par le compilateur d'une possible opération de prérécupération.
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