读取并修改被封装的值,exchange 会将 val 指定的值替换掉之前该原子对象封装的值,并返回之前该原子对象封装的值,整个过程是原子的(因此exchange 操作也称为read-modify-write操作)。该函数与 std::atomic 对象的atomic::exchange() 成员函数等价。 atomic_exchange_explicit 读取并修改被封装的值,exchange 会将 val...
template< class T > T exchange( volatile std::atomic<T>* obj, T desired ); 其中,obj参数指向需要替换值的atomic对象,desired参数为期望替换成的值。如果替换成功,则返回原来的值。 整个操作是原子的(原子读-修改-写操作):从读取(要返回)值的那一刻到此函数修改值的那一刻,该值不受其他线程的影响。
std::atomic<T>::operator= std::atomic<T>::is_lock_free std::atomic<T>::is_always_lock_free std::atomic<T>::store std::atomic<T>::load std::atomic<T>::operator T() std::atomic<T>::exchange std::atomic<T>::compare_exchange_weak, std::atomic<T>::compare_exchange_strong std...
在多线程环境中,当多个线程需要访问同一个变量时,如果该变量被声明为std::atomic类型,那么对该变量的所有操作都将自动成为原子操作。 3.2.2 原子类型的操作 std::atomic提供了多种操作,包括但不限于: load():安全地读取原子对象的值。 store():安全地写入原子对象的值。 exchange():原子地替换原子对象的值。
bool compare_exchange_strong(T&,T,memory_order=memory_order_se q_cst)volatile;bool compare_exchange_strong(T&,T,memory_order=memory_order_se q_cst);atomic()=default;constexpr atomic(T);atomic(const atomic&)=delete;atomic&operator=(const atomic&)=delete;atomic&operator=(const atomic&)...
atomic_exchange template (1)template <class T> T atomic_exchange (volatile atomic<T>* obj, T val) noexcept;template <class T> T atomic_exchange (atomic<T>* obj, T val) noexcept; overloads (2)T atomic_exchange (volatile A* obj, T val) noexcept;T atomic_exchange (A* obj, T val...
在Rust标准库中添加这种通用Atomic的提案需要讨论是否应该在no_std程序中它。常规的HashMap需要分配内存,这在no_std程序中是不可能的。固定大小的表可用于no_std程序,但由于各种原因可能并不受欢迎。 Compare-exchange对填充的处理 P0528R3改变了compare_exchange处理填充的方式。atomic的比较/交换操作也会对填充位进行...
std::atomic提供了多种操作,包括但不限于: load():安全地读取原子对象的值。 store():安全地写入原子对象的值。 exchange():原子地替换原子对象的值。 compare_exchange_weak()和compare_exchange_strong():条件性原子地替换原子对象的值。 这些操作都保证了在多线程环境中对共享数据的安全访问。
operator std::shared_ptr<T>() const noexcept; 等价于 return load();。 atomic<shared_ptr<T>>::exchange std::shared_ptr<T> exchange(std::shared_ptr<T> desired, std::memory_order order = std::memory_order_seq_cst) noexcept; 如同用 p.swap(desired) ,原子地以 desired 替换底层 std:...
Catomic_exchange(volatileA*obj,C desired);Catomic_exchange_explicit(volatileA*obj,C desired,memory_order order); atomic_exchange和atomic_exchange_explicit:是原子交换操作,将desired的值写入到原子对象,并返回之前保存的旧值。 obj:原子对象的指针。