Fonction InterlockedCompareExchange (winnt.h)
Effectue une opération de comparaison et d’échange atomique sur les valeurs spécifiées. La fonction compare deux valeurs 32 bits spécifiées et échange avec une autre valeur 32 bits en fonction du résultat de la comparaison.
Si vous échangez des valeurs de pointeur, cette fonction a été remplacée par la fonction InterlockedCompareExchangePointer .
Pour fonctionner sur des valeurs 64 bits, utilisez la fonction InterlockedCompareExchange64 .
Syntaxe
LONG InterlockedCompareExchange(
[in, out] LONG volatile *Destination,
[in] LONG ExChange,
[in] LONG Comperand
);
Paramètres
[in, out] Destination
Pointeur vers la valeur de destination.
[in] ExChange
Valeur d’échange.
[in] Comperand
Valeur à comparer à Destination.
Valeur retournée
La fonction retourne la valeur initiale du paramètre Destination .
Remarques
La fonction compare la valeur Destination à la valeur Comparand . Si la valeur Destination est égale à la valeur Comparand , la valeur Exchange est stockée dans l’adresse spécifiée par Destination. Dans le cas contraire, aucune opération n'est effectuée.
Les paramètres de cette fonction doivent être alignés sur une limite 32 bits ; sinon, la fonction se comportera de manière imprévisible sur les systèmes multiprocesseurs x86 et tous les systèmes non x86. malloc, calloc, HeapAlloc et HeapReAlloc fournissent une mémoire suffisamment alignée.
Les fonctions verrouillées fournissent un mécanisme simple pour synchroniser l’accès à une variable partagée par plusieurs threads. Cette fonction est atomique par rapport aux appels à d’autres fonctions verrouillées.
Cette fonction est implémentée à l’aide d’une intrinsèque du compilateur dans la mesure du possible. Pour plus d’informations, consultez le fichier d’en-tête WinBase.h et _InterlockedCompareExchange.
Cette fonction génère une barrière de mémoire complète (ou clôture) pour s’assurer que les opérations de mémoire sont effectuées dans l’ordre.
Systèmes itanium : Pour les applications critiques en matière de performances, utilisez plutôt InterlockedCompareExchangeAcquire ou InterlockedCompareExchangeRelease .
Configuration requise
Client minimal pris en charge | Windows XP [applications de bureau | applications UWP] |
Serveur minimal pris en charge | Windows Server 2003 [applications de bureau | applications UWP] |
Plateforme cible | Windows |
En-tête | winnt.h (inclure Windows.h) |
Bibliothèque | Kernel32.lib |
DLL | Kernel32.dll |
Voir aussi
InterlockedCompare64Exchange128
InterlockedCompareExchange16Acquire
InterlockedCompareExchange16NoFence
InterlockedCompareExchange16Release
InterlockedCompareExchangeAcquire
InterlockedCompareExchangeAcquire64
InterlockedCompareExchangeNoFence
InterlockedCompareExchangeNoFence64
InterlockedCompareExchangePointer
InterlockedCompareExchangePointerAcquire
InterlockedCompareExchangePointerNoFence
InterlockedCompareExchangePointerRelease
InterlockedCompareExchangeRelease