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;