Fonction InterlockedCompareExchangePointer (miniport.h)
La routine InterlockedCompareExchangePointer effectue une opération atomique qui compare la valeur du pointeur d’entrée pointeur pointée par Destination à 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 sur laquelle définir (*Destination).
Comperand
Spécifie la valeur PVOID à comparer à (**Destination*).
Valeur retournée
InterlockedCompareExchangePointer retourne la valeur d’origine du pointeur sur *Destination (autrement dit, la valeur de ce pointeur à l’entrée de la routine).
Remarques
Si Comparand est égal à *Destination, *Destination est défini sur Exchange. Sinon, *Destination est inchangée.
InterlockedCompareExchangePointer fournit un moyen atomique rapide de synchroniser le test et la mise à jour d’une variable 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 exchange.
InterlockedCompareExchangePointer est conçu pour la vitesse et, généralement, est implémenté inline par un compilateur. InterlockedCompareExchangePointer est atomique uniquement par rapport aux autres appels Xxx verrouillés. Il n’utilise pas de verrou tournant 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 | miniport.h (inclure Wdm.h, Ntddk.h, Ntifs.h, Miniport.h) |
IRQL | N’importe quel niveau |