Partager via


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.

_InterlockedCompareExchangePointerfournit 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

Voir aussi

Intrinsèques du compilateur
Mots clés