你截图中的a.load(std::memory_order::memory_order_relaxed)是无法读到最新值的, 因为relaxed order...
T load(std::memory_orderorder=std::memory_order_seq_cst)constvolatilenoexcept; 原子地加载并返回原子变量的当前值。按照order的值影响内存。 order必须是std::memory_order_relaxed、std::memory_order_consume、std::memory_order_acquire或std::memory_order_seq_cst之一。否则行为未定义。
只可能load到0和0xFFFFFFFF两种情况,而不可能读到比如0x0000FFFF这种中间值;
is_lock_freestd::atomic::loadstd::atomic::notify_allstd::atomic::notify_onestd::atomic::operator Tstd::atomic::operator=std::atomic::operatorsstd::atomic::operators (int)std::atomic::storestd::atomic::waitstd::atomic_compare_exchange_strongstd::atomic_compare_exchange_strong_explicitstd::...
template< class T > T atomic_load_explicit( const volatile std::atomic<T>* obj, std::memory_order order ); 1%29原子地获得obj好像obj->load() 2%29原子地获得obj好像obj->load(order) 参数 obj - pointer to the atomic object to modify ...
1,2)如同用obj->load()原子地獲得obj指向的值。 3,4)如同用obj->load(order)原子地獲得obj所指向的值。 如果order是std::memory_order_release和std::memory_order_acq_rel之一,那麼行為未定義。 參數 obj-指向要加載的原子對象的指針 order-內存同步定序 ...
T atomic_load_explicit( const std::atomic<T>* obj, std::memory_order order ) noexcept; (3) (C++11 起) template< class T > T atomic_load_explicit( const volatile std::atomic<T>* obj, std::memory_order order ) noexcept; (4) (C++11 起) 1...
注意std::atomic对象不支持移动构造和移动赋值,需要使用std::atomic的load和store成员函数。load函数原子性地读取,store原子性地写入 volatile关键字修饰的变量不具备和std::atomic对象一样的原子性。 std::atomic也可避免编译器对代码的重排,例如: auto imptValue = computeImportantValue();//计算值valAvailable =tr...
load() :返回原子变量模板对象 T load (memory_order sync = memory_order_seq_cst)constvolatilenoexcept; T load (memory_order sync = memory_order_seq_cst)constnoexcept; exchange() :更新原子变量模板对象,并返回旧的对象,类似于atomic_flag的test_and_set()接口,此操作也是原子的。
std::atomic_load_explicit 原子地获取原子对象的值,使用显式内存顺序(函数模板) std::atomic_exchange 原子地替换原子对象的值并获取之前持有的值(函数模板) std::atomic_exchange_explicit 原子地替换原子对象的值并获取之前持有的值,使用显式内存顺序(函数模板) ...