--- layout: stdlib-reference --- # InterlockedCompareExchange ## Description Perform an atomic compare and exchange operation on dest. ## Signature
void InterlockedCompareExchange<T>(
    T dest,
    T compare_value,
    T value,
    out T original_value)
    where T : IAtomicable;

## Generic Parameters #### T: [IAtomicable](../interfaces/iatomicable-01/index.html) The type of the value to perform the atomic operation on. ## Parameters #### dest : [T](interlockedcompareexchange-0bi.html#typeparam-T) The value to perform the atomic operation on. #### compare\_value : [T](interlockedcompareexchange-0bi.html#typeparam-T) The value to compare dest with. #### value : [T](interlockedcompareexchange-0bi.html#typeparam-T) The value to store into dest if the compare result is equal. #### original\_value : [T](interlockedcompareexchange-0bi.html#typeparam-T) The value of dest before the operation. ## Remarks When targeting HLSL, a call to this function with T being float will translate to a call to InterlockedCompareExchangeFloatBitwise, which means the comparison is done as a bitwise comparison. On SPIR-V (Vulkan), this function maps to OpAtomicCompareExchange. On Metal and WGSL, all floating-point types are not supported. On CUDA, this function maps to atomicCAS. ## Availability and Requirements Defined for the following targets: #### hlsl Available in all stages. #### glsl Available in all stages. #### cuda Available in all stages. #### metal Available in all stages. #### spirv Available in all stages.