C++ Atomic 库 - fetch add
描述
它会自动将参数添加到存储在原子对象中的值中,并获取先前保存的值。
声明
以下是 std::atomic::fetch_add 的声明。
T fetch_add (T val, memory_order sync = memory_order_seq_cst) volatile noexcept;
C++11
T fetch_add (T val, memory_order sync = memory_order_seq_cst) noexcept;
以下是 std::atomic::fetch_add 的声明(仅限 atomic
T fetch_add (ptrdiff_t val, memory_order sync = memory_order_seq_cst) volatile noexcept;
C++11
T fetch_add (ptrdiff_t val, memory_order sync = memory_order_seq_cst) noexcept;
参数
arg − 它用于放置算术加法的另一个参数。
order − 它用于强制值的内存顺序。
返回值
它以 *this 的修改顺序返回此函数效果之前的值。
异常
No-noexcept − 这个成员函数从不抛出异常。
示例
在下面的 std::atomic::fetch_add 示例中。
#include <iostream>
#include <thread>
#include <atomic>
std::atomic<long long> data;
void do_work() {
data.fetch_add(1, std::memory_order_relaxed);
}
int main() {
std::thread th1(do_work);
std::thread th2(do_work);
std::thread th3(do_work);
std::thread th4(do_work);
std::thread th5(do_work);
th1.join();
th2.join();
th3.join();
th4.join();
th5.join();
std::cout << "Ans:" << data << '\n';
}
示例输出应该是这样的 −
Ans:5

