Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
InterlockedCompareExchange
Collapse the table of content
Expand the table of content

InterlockedCompareExchange routine

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

Syntax


LONG InterlockedCompareExchange(
  _Inout_ LONG volatile *Destination ,
  _In_    LONG          Exchange ,
  _In_    LONG          Comparand
);

Parameters

Destination [in, out]

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

Exchange [in]

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

Comparand [in]

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 Comparand 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 Comparand, 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

Target platform

Universal

Version

Available starting with Windows 2000.

Header

Wdm.h (include Wdm.h, Ntddk.h, or Ntifs.h)

Library

OneCoreUAP.lib on Windows 10

IRQL

Any level

See also

ExInterlockedCompareExchange64
InterlockedCompareExchangePointer
InterlockedDecrement
InterlockedExchange
InterlockedExchangePointer
InterlockedIncrement

 

 

Send comments about this topic to Microsoft

Show:
© 2015 Microsoft