Partager via


Fonction InterlockedCompareExchangePointer (wdm.h)

La routine InterlockedCompareExchangePointer effectue une opération atomique qui compare la valeur de pointeur d’entrée pointée par Destination à la valeur de pointeur Comperand.

Syntaxe

PVOID InterlockedCompareExchangePointer(
  [in, out] PVOID volatile *Destination,
  [in]      PVOID          Exchange,
  [in]      PVOID          Comperand
);

Paramètres

[in, out] Destination

Pointeur vers une valeur PVOID. Si (*Destination) = Comperand, la routine définit (*Destination) sur Exchange.

[in] Exchange

Spécifie la valeur PVOID sur laquelle définir (*Destination).

[in] Comperand

Spécifie la valeur PVOID à comparer à (*Destination).

Valeur retournée

InterlockedCompareExchangePointer retourne la valeur d’origine du pointeur à *Destination (autrement dit, la valeur de ce pointeur à l’entrée de la routine).

Remarques

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

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

InterlockedCompareExchangePointer est conçu pour la vitesse et, généralement, est implémenté en ligne par un compilateur. InterlockedCompareExchangePointer 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.

La routine InterlockedCompareExchangePointer est atomique uniquement par rapport aux autres appels Xxx verrouillés.

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 Desktop (Expérience utilisateur)
En-tête wdm.h (inclure Wdm.h, Ntddk.h, Ntifs.h, Miniport.h)
IRQL N’importe quel niveau

Voir aussi

InterlockedCompareExchange

InterlockedExchange

InterlockedExchangePointer