Condividi tramite


Funzione InterlockedCompareExchangePointer (wdm.h)

La routine InterlockedCompareExchangePointer esegue un'operazione atomica che confronta il valore del puntatore di input a cui punta Destination con il valore del puntatore Comperand.

Sintassi

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

Parametri

[in, out] Destination

Puntatore a un valore PVOID. Se (*Destination) = Comperand, la routine imposta (*Destination) su Exchange.

[in] Exchange

Specifica il valore PVOID su cui impostare (*Destination).

[in] Comperand

Specifica il valore PVOID da confrontare con (*Destination).

Valore restituito

InterlockedCompareExchangePointer restituisce il valore originale del puntatore in corrispondenza di *Destination , ovvero il valore di questo puntatore all'ingresso della routine.

Commenti

Se Comperand è uguale a *Destination, *Destination è impostato su Uguale a Exchange. In caso contrario, *Destination è invariato.

InterlockedCompareExchangePointer offre un modo rapido e atomico per sincronizzare il test e l'aggiornamento di una variabile puntatore condivisa da più thread. Se il valore di input a cui punta Destination è uguale al valore di Comperand, il valore a cui punta Destination viene impostato sul valore di Exchange.

InterlockedCompareExchangePointer è progettato per la velocità e, in genere, viene implementato inline da un compilatore. InterlockedCompareExchangePointer è atomico solo rispetto ad altre chiamate Xxx interlocked. Non usa un blocco di rotazione e può essere usato in modo sicuro nei dati di paging.

La routine InterlockedCompareExchangePointer è atomica solo rispetto ad altre chiamate Xxx interlocked.

Le operazioni interlocked non possono essere usate nella memoria non memorizzata nella cache.

Requisiti

Requisito Valore
Client minimo supportato Disponibile a partire da Windows 2000.
Piattaforma di destinazione Desktop
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Miniport.h)
IRQL Qualsiasi livello

Vedi anche

InterlockedCompareExchange

InterlockedExchange

InterlockedExchangePointer