使用load函数时,如果不指定memory_order,则默认为memory_order_seq_cst。 load函数的返回值类型为T,即原子变量的类型。在使用load函数时需要指定类型参数T。如果使用第二种形式的load函数,则无需指定类型参数T,程序会自动根据上下文推断出类型。store函数:void store(T desired, std::memory_order order = std::me...
// atomic::load/store example#include<iostream> // std::cout#include<atomic> // std::atomic, std::memory_order_relaxed#include<thread> // std::threadstd::atomic<int>foo(0);// std::atomic<int> foo1(foo); // error// std::atomic<int> foo1(foo.load()); // okvoidset_foo(int...
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()接口,此操作也是原子的。 T exchange (T val...
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之一。否则行为未定义。
对于需要依赖严格顺序的使用场景,需要在store和load函数中传递对应的memory_order,比如memory_order_...
int y = x.load(); // 读x x.store(10); // 写x 1. 2. 3. 结合使用 volatile 和 std::atomic 对于既需要原子性又需要防止编译器优化的情况(例如访问共享内存中的硬件寄存器),可以将两者结合起来使用: volatile std::atomic<int> vai; // 对vai的操作是原子性的,且不能被优化 ...
首先,要明白 std::memory_order 本身是什么,它是定义于 <atomic> 头文件当中的六个枚举值,使用时用做参数传递给 std::atomic 相关的操作函数,比如 load、store 等。 支持传 std::memory_order 枚举的相关操作函数上文都已经列出,这里重点将这六个枚举都代表什么。 std::memory_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提供了一系列操作函数和操作符,用于对原子变量进行读写和操作。以下是一些常用的函数和操作符: load():原子加载操作,返回当前值; store():原子存储操作,设置新值; exchange():原子交换操作,设置新值,并返回旧值; compare_exchange_weak()和compare_exchange_strong():原子比较交换操作,用于更新变量的...
load 原子地获取原子对象的值 (公有成员函数) operator T 从原子对象加载值 (公有成员函数) exchange 原子地替换原子对象的值并获取之前持有的值 (公有成员函数) compare_exchange_weak compare_exchange_strong 原子地将原子对象的值与非原子参数进行比较,如果相等则进行原子交换,如果不等则进行原子加载 (公有成员...