Funzione InterlockedCompareExchange (winnt.h)

Esegue un'operazione atomica di confronto e scambio sui valori specificati. La funzione confronta due valori e scambi a 32 bit specificati con un altro valore a 32 bit in base al risultato del confronto.

Se si scambiano valori di puntatore, questa funzione è stata sostituita dalla funzione InterlockedCompareExchangePointer .

Per operare su valori a 64 bit, usare la funzione InterlockedCompareExchange64 .

Sintassi

LONG InterlockedCompareExchange(
  [in, out] LONG volatile *Destination,
  [in]      LONG          ExChange,
  [in]      LONG          Comperand
);

Parametri

[in, out] Destination

Puntatore al valore di destinazione.

[in] ExChange

Valore di scambio.

[in] Comperand

Valore da confrontare con Destination.

Valore restituito

La funzione restituisce il valore iniziale del parametro Destination .

Commenti

La funzione confronta il valore Di destinazione con il valore Comparand . Se il valore Di destinazione è uguale al valore Comparand , il valore di Exchange viene archiviato nell'indirizzo specificato da Destination. In caso contrario, non viene eseguita alcuna operazione.

I parametri per questa funzione devono essere allineati a un limite a 32 bit; in caso contrario, la funzione si comporta in modo imprevedibile nei sistemi x86 multiprocessore e in tutti i sistemi non x86. malloc, calloc, HeapAlloc e HeapReAlloc forniscono memoria sufficientemente allineata.

Le funzioni interlock forniscono un meccanismo semplice per la sincronizzazione dell'accesso a una variabile condivisa da più thread. Questa funzione è atomica rispetto alle chiamate ad altre funzioni interlock.

Questa funzione viene implementata usando un intrinseco del compilatore, se possibile. Per altre informazioni, vedere il file di intestazione WinBase.h e _InterlockedCompareExchange.

Questa funzione genera una barriera di memoria completa (o recinzione) per garantire che le operazioni di memoria vengano completate in ordine.

Sistemi basati su Itanium: Per le applicazioni critiche per le prestazioni, usare invece InterlockedCompareExchangeAcquire o InterlockedCompareExchangeRelease .

Nota Questa funzione è supportata nei sistemi basati su Windows RT.
 

Requisiti

   
Client minimo supportato Windows XP [app desktop | App UWP]
Server minimo supportato Windows Server 2003 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione winnt.h (includere Windows.h)
Libreria Kernel32.lib
DLL Kernel32.dll

Vedere anche

Accesso variabile interlocked

InterlockedCompare64Exchange128

InterlockedCompareExchange128

InterlockedCompareExchange16

InterlockedCompareExchange16Acquire

InterlockedCompareExchange16NoFence

InterlockedCompareExchange16Release

InterlockedCompareExchange64

InterlockedCompareExchangeAcquire

InterlockedCompareExchangeAcquire64

InterlockedCompareExchangeNoFence

InterlockedCompareExchangeNoFence64

InterlockedCompareExchangePointer

InterlockedCompareExchangePointerAcquire

InterlockedCompareExchangePointerNoFence

InterlockedCompareExchangePointerRelease

InterlockedCompareExchangeRelease

InterlockedCompareExchangeRelease64

Funzioni di sincronizzazione