fetch_add
描述 (Description)
它自动原子地将参数添加到存储在原子对象中的值,并获得先前保存的值。
声明 (Declaration)
以下是std :: atomic :: fetch_add的声明。T fetch_add (T val, memory_order sync = memory_order_seq_cst) volatile noexcept;
C++11T fetch_add (T val, memory_order sync = memory_order_seq_cst) noexcept;
以下是std :: atomic :: fetch_add的声明(仅限原子成员) 模板专业化)。T fetch_add (ptrdiff_t val, memory_order sync = memory_order_seq_cst) volatile noexcept;
C++11T fetch_add (ptrdiff_t val, memory_order sync = memory_order_seq_cst) noexcept;
参数 (Parameters)arg - 用于添加算术加法的另一个参数。
order - 用于强制执行值的内存顺序。
返回值 (Return Value)
它以* this的修改顺序返回紧接此函数效果之前的值。
异常 (Exceptions)
No-noexcept - 这个成员函数永远不会抛出异常。
例子 (Example)
在下面的示例中为std :: atomic :: fetch_add。#include
#include
#include
std::atomic 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