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) per Exchange.

[in] Exchange

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

[in] Comperand

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

Valore restituito

l' InterlockedCompareExchangePointer restituisce il valore originale del puntatore in * di destinazione, ovvero il valore di questo puntatore alla voce della routine.

Osservazioni

Se Comperand è uguale a *Destination, *Destination è impostato su uguale Exchange. In caso contrario, * di destinazione non è modificato.

l' 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 interlockedXxx. 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 chiamatexxxinterlocked.

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

Fabbisogno

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

Vedere anche

InterlockedCompareExchange

interlockedExchange

InterlockedExchangePointer