Partager via


InterlockedCompareExchangePointer, fonction (miniport.h)

La routine InterlockedCompareExchangePointer effectue une opération atomique qui compare la valeur du pointeur d’entrée vers laquelle pointe destination avec la valeur de pointeur Comparand.

Syntaxe

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

Paramètres

[in, out] Destination

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

[in] Exchange

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

Comperand

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

Valeur de retour

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

Remarques

Si Comparand est égal à *de destination, *Destination est défini sur Exchange. Sinon, *destination n’est pas modifiée.

InterlockedCompareExchangePointer offre un moyen rapide et atomique de synchroniser les tests 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 Comparand, la valeur pointée par Destination est définie sur la valeur de Exchange.

InterlockedCompareExchangePointer est conçu pour accélérer et, généralement, est implémenté en ligne par un compilateur. interlockedCompareExchangePointer n’est atomique que par rapport aux autres appels interblocageXxx. Il n’utilise pas de verrou de rotation et peut être utilisé en toute sécurité sur les données paginables.

La routine interlockedCompareExchangePointer n’est atomique que par rapport à d’autres appels interlockésXxx.

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

Exigences

Exigence Valeur
client minimum pris en charge Disponible à partir de Windows 2000.
plateforme cible Bureau
d’en-tête miniport.h (include Wdm.h, Ntddk.h, Ntifs.h, Miniport.h)
IRQL N’importe quel niveau

Voir aussi

InterlockedCompareExchange

interlockedExchange

interlockedExchangePointer