InterlockedCompareExchange function (wdm.h)

The InterlockedCompareExchange routine performs an atomic operation that compares the input value pointed to by Destination with the value of Comperand.

Syntax

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

Parameters

[in, out] Destination

A pointer to the input value that is compared with the value of Comperand.

[in] ExChange

Specifies the output value pointed to by Destination if the input value pointed to by Destination equals the value of Comperand.

[in] Comperand

Specifies the value that is compared with the input value pointed to by Destination.

Return value

InterlockedCompareExchange returns the original value of *Destination.

Remarks

If Comperand is equal to *Destination, then *Destination is set to equal Exchange. Otherwise, *Destination is unchanged.

InterlockedCompareExchange provides a fast, atomic way to synchronize the testing and updating of a variable that is shared by multiple threads. If the input value pointed to by Destination equals the value of Comperand, the output value of Destination is set to the value of Exchange.

InterlockedCompareExchange is designed for speed and, typically, is implemented inline by a compiler. InterlockedCompareExchange is atomic only with respect to other InterlockedXxx calls. It does not use a spin lock and can be safely used on pageable data.

Interlocked operations cannot be used on non-cached memory.

Requirements

Requirement Value
Minimum supported client Available starting with Windows 2000.
Target Platform Universal
Header wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Miniport.h)
Library OneCoreUAP.lib on Windows 10
IRQL Any level

See also

ExInterlockedCompareExchange64

InterlockedCompareExchangePointer

InterlockedDecrement

InterlockedExchange

InterlockedExchangePointer

InterlockedIncrement