Performs an atomic compare-and-exchange operation on the specified values. The function compares two specified 128-bit values and exchanges with another 128-bit value based on the outcome of the comparison.
To operate on 16-bit values, use the InterlockedCompareExchange16 function.
To operate on 32-bit values, use the InterlockedCompareExchange function.
To operate on 64-bit values, use the InterlockedCompareExchange64 function.
BOOLEAN InterlockedCompareExchange128( LONG64 volatile *Destination, LONG64 ExchangeHigh, LONG64 ExchangeLow, LONG64 *ComparandResult );
A pointer to the destination value. This parameter is an array of two 64-bit integers considered as a 128-bit field.
The high part of the exchange value.
The low part of the exchange value.
The value to compare to. This parameter is an array of two 64-bit integers considered as a 128-bit field. On output, this is overwritten with the original value of the destination.
The function returns 1 if ComparandResult equals the original value of the Destination parameter, or 0 if ComparandResult does not equal the original value of the Destination parameter.
The function compares the Destination value with the ComparandResult value:
- If the Destination value is equal to the ComparandResult value, the ExchangeHigh and ExchangeLow values are stored in the array specified by Destination, and also in the array specified by ComparandResult.
- Otherwise, the Destination is left unmodified.
The parameters for this function must be aligned on a 16-byte boundary; otherwise, the function will behave unpredictably on x64 systems. See _aligned_malloc.
The interlocked functions provide a simple mechanism for synchronizing access to a variable that is shared by multiple threads. This function is atomic with respect to calls to other interlocked functions.
This function is only available on x64-based systems, and it is implemented using a compiler intrinsic. For more information, see the WinBase.h header file and _InterlockedCompareExchange128.
This function generates a full memory barrier (or fence) to ensure that memory operations are completed in order.
|Minimum supported client||Windows 8 [desktop apps only]|
|Minimum supported server||Windows Server 2012 [desktop apps only]|
|Header||winnt.h (include Windows.h)|