当std :: atomic :: compare_exchange_weak只使用_InterlockedCompareExchange内在函数时,有什么意义?

时间:2017-10-10 23:47:34

标签: c++ std atomic

在Visual Studio 2017上查看<atomic>中compare_exchange_weak的实现,在每种类型的内存排序中,它调用相同的函数:

inline int _Compare_exchange_release_4(volatile _Uint4_t *_Tgt,
    _Uint4_t *_Exp, _Uint4_t _Value)
    {   /* compare and exchange values atomically with
            release memory order */
    _Uint4_t _Old_exp = *_Exp;  /* read before atomic operation */

    _Uint4_t _Prev = _INTRIN_RELEASE(_InterlockedCompareExchange)((volatile long *)_Tgt,
        _Value, _Old_exp);

    if (_Prev == _Old_exp)
        return (1);
    else
        {   /* copy old value */
        *_Exp = _Prev;
        return (0);
        }
    }

(代码是Release排序的一个例子,但函数的所有版本都是相同的)

所以它只使用内在的_InterlockedCompareExchange,而且我在MSDN中看不到有关此功能失败的任何内容,那么这些检查的重点是什么?为什么不直接拨打_InterlockedCompareExchange

0 个答案:

没有答案