在C++中,`std::atomic::compare_exchange`函数的选择主要基于业务需求和数据对象的特性。选择`strong`版本的比较与交换操作,通常意味着在比较不匹配时不需要循环,这是更优的选择,除非数据类型`T`的表示可能包含填充位、陷阱位或提供相同值的不同对象表示(如浮点数的NaN)。在这些情况下,弱比较与交...
} bool compare_exchange_strong(int &old_value, int val) { std::lock_guard lk(mtx); if ( data == old_value ) { data = val; return true; } else { old_value = data; return false; } } }; int main( int argc, char **argv ) { std::cout << std::boolalpha; TestAtomic<int...
首先参考:std::atomic<T>::compare_exchange_weak, std::atomic<T>::compare_exchange_strong When ...
template< class T > bool atomic_compare_exchange_strong_explicit( volatile std::atomic<T>* obj, T* expected, T desired, std::memory_order succ, std::memory_order fail ); 原子比较对象表示所指向的对象的obj所指向的对象的对象表示形式。expected,好像std::memcmp,如果这些是按位相等的,则将...
boolatomic_compare_exchange_weak(volatilestd::atomic<T>*obj, typenamestd::atomic<T>::value_type*expected, typenamestd::atomic<T>::value_typedesired)noexcept; (2)(C++11 起) template<classT> boolatomic_compare_exchange_strong(std::atomic<T>*obj, ...
bool atomic_compare_exchange_strong( volatilestd::atomic<T>* obj, typenamestd::atomic<T>::value_type* expected, typenamestd::atomic<T>::value_type desired ) noexcept; (3)(C++11 起) template< class T > bool atomic_compare_exchange_weak_explicit(std::atomic<T>* obj, ...
atomic_compare_exchange_XXX函数用观察到的值更新它们的“expected”参数,因此您的循环如下所示:
bool atomic_compare_exchange_strong(A* object, C * expected, C desired); bool atomic_compare_exchange_weak_explicit(volatile A* object, C * expected, C desired, memory_order success, memory_order failure); bool atomic_compare_exchange_weak_explicit(A* object, C * expected, C desired, memo...
演示std::compare_exchange_strong 如何要么更改原子对象的值,要么将变量用于比较。 本节未完成原因:强 CAS 的更实际用法会更好,例如在 Concurrency in Action 使用它的地方 运行此代码#include <atomic> #include <iostream>std::atomic<int> ai;int
std::atomic_compare_exchange_weak_explicit( &head, &new_node->next, new_node, std::memory_order_release, std::memory_order_relaxed)) ; // 循环体为空 // 注意:上述循环非线程安全,至少在 // 早于 4.8.3 的 GCC(bug 60272),早于 2014-05-05 的 clang(bug 18899) // 早于 2014-03-17...