InterlockedCompareExchange() in HLSL

void InterlockedCompareExchange(
  in   UINT dest,
  in   UINT compare_value,
  in   UINT value,
  out  UINT original_value
);

// pseudocode
original_value = image[ dest ];
if ( compare_value == old_value )
{
    image[ dest ] = value;
}
return original_value;