Partager via


Fonction InterlockedCompareExchange (miniport.h)

La routine InterlockedCompareExchange effectue une opération atomique qui compare la valeur d’entrée pointée par Destination à la valeur comparand.

Syntaxe

LONG InterlockedCompareExchange(
  [in, out] LONG volatile *Destination,
            LONG          ExChange,
            LONG          Comperand
);

Paramètres

[in, out] Destination

Pointeur vers la valeur d’entrée comparée à la valeur de Comparand.

ExChange

Spécifie la valeur de sortie pointée par Destination si la valeur d’entrée pointée par Destination est égale à la valeur de Comparand.

Comperand

Spécifie la valeur qui est comparée à la valeur d’entrée pointée par Destination.

Valeur retournée

InterlockedCompareExchange retourne la valeur d’origine de *Destination.

Remarques

Si Comparand est égal à *Destination, *Destination est défini sur Exchange. Sinon, *Destination est inchangée.

InterlockedCompareExchange fournit un moyen atomique rapide de synchroniser le test et la mise à jour d’une variable partagée par plusieurs threads. Si la valeur d’entrée pointée par Destination est égale à la valeur de Comparand, la valeur de sortie de Destination est définie sur la valeur d’Exchange.

InterlockedCompareExchange est conçu pour la vitesse et, généralement, est implémenté en ligne par un compilateur. InterlockedCompareExchange est atomique uniquement par rapport aux autres appels Xxx verrouillés. Il n’utilise pas de verrou de rotation et peut être utilisé en toute sécurité sur des données paginables.

Les opérations verrouillées ne peuvent pas être utilisées sur la mémoire non mise en cache.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible à partir de Windows 2000.
Plateforme cible Universal
En-tête miniport.h (incluent Wdm.h, Ntddk.h, Ntifs.h, Miniport.h)
Bibliothèque OneCoreUAP.lib sur Windows 10
IRQL N’importe quel niveau

Voir aussi

ExInterlockedCompareExchange64

InterlockedCompareExchangePointer

InterlockedDecrement

InterlockedExchange

InterlockedExchangePointer

InterlockedIncrement