main.cpp #include<iostream>#include<atomic>#include<mutex>template<classT>classTestAtomic{private:mutablestd::mutexmtx;intdata;public:intstore(intval){std::lock_guardlk(mtx);data=val;returndata;}intload()const{std::lock_guardlk(mtx);returndata;}intfetch_add(intval){std::lock_guardlk(mtx);...
bool atomic_compare_exchange_strong_explicit(A* object, C * expected, C desired, memory_order success, memory_order failure); bool A::compare_exchange_weak(C & expected, C desired, memory_order success, memory_order failure) volatile; bool A::compare_exchange_weak(C & expected, C desired,...
head.compare_exchange_weak(old_head, new_node, // std::memory_order_release, // std::memory_order_relaxed)); } }; int main() { stack<int> s; s.push(1); s.push(2); s.push(3); }演示compare_exchange_strong 如何要么更改原子对象的值,要么将变量用于比较。
atomic_compare_exchange_XXX函数用观察到的值更新它们的“expected”参数,因此您的循环如下所示:
我将给出一个例子,因为它非常简单,所以我确实使用了它。
在循环中进行比较和交换时,compare_exchange_weak 在有的平台上会产出更好的性能。 当compare_exchange_weak 比较和交换会要求循环,而 compare_exchange_strong 不要求时,推荐用 std::compare_exchange_strong,除非 T 的对象表示可包含填充位、(C++20 前)陷阱位或为同一值提供多个对象表示(例如浮点 NaN)。这些...
bool compare_exchange_weak ( value_type& expected, value_type desired, std::memory_order order = std::memory_order_seq_cst ) const noexcept; (2) (constexpr since C++26) bool compare_exchange_strong ( value_type& expected, value_type desired, std::memory_order success, std::memory_order...
注意,compare_exchange_weak函数是一个弱化版本的原子操作函数,因为在某些平台上它可能会失败并重试。如果需要保证严格的原子性,则应该使用compare_exchange_strong函数。 示例: #include <iostream> // std::cout #include <atomic> // std::atomic #include <thread> // std::thread #include <vector> // st...
bool atomic_compare_exchange_strong( std::atomic<T>* obj, typename std::atomic<T>::value_type* expected, typename std::atomic<T>::value_type desired ) noexcept; template< class T > bool atomic_compare_exchange_strong( volatile std::atomic<T>* obj, typename std::atomic<T>::value_type...
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,如果这些是按位相等的,则将...