【c++】关于两个cas操作的区别 它们的区别是什么

cas具体操作见cas无锁并发

C++中的cas操作主要有以下2个函数
bool std::atomic::compare_exchange_weak(T& expected, T desired, ..);
bool std::atomic::compare_exchange_strong(T& expected, T desired, ..);

它们的区别是什么

  1. std::atomic::compare_exchange_weak
    一些平台下,cas操作是由指令序列实现的,因此在一些情况下,可能导致虚假失败。

该函数通常伴随while一起出现。

当更新值或发生时返回false,如果因更新值失败,会将预期值更新。

因此使用while(!compare_exchange_weak())即可更新直到成功。

  1. std::atomic::compare_exchange_strong

该函数不会出现weak所说的伪失败的情况,但开销将更大,不适合与while同时使用,当其返回失败,就一定是预期值不符合导致的失败。