std::atomic::fetch_add
STD::原子::获取[医]加
| (1) | (since C++11) (member only of atomic |
---|---|---|
T fetch_add( T arg, std::memory_order order = std::memory_order_seq_cst | | |
T fetch_add( T arg, std::memory_order order = std::memory_order_seq_cst ) volatile; | | |
| (2) | (since C++11) (member only of atomic<T*> template specialization) |
T* fetch_add( std::ptrdiff_t arg, std::memory_order order = std::memory_order_seq_cst | | |
T* fetch_add( std::ptrdiff_t arg, std::memory_order order = std::memory_order_seq_cst ) volatile; | |
原子地将当前值替换为值的算术加法的结果和arg
.操作是读-修改-写操作.。的值影响内存。order
...
签名Integral
类型,算法定义为使用两种补码表示形式。没有未定义的结果。为T*
类型,结果可能是一个未定义的地址,但否则操作就没有未定义的行为。
参数
arg | - | the other argument of arithmetic addition |
---|---|---|
order | - | memory order constraints to enforce |
返回值
中此函数的效果之前的值。修改顺序成*this
...
例外
noexcept
规格:
noexcept
例
二次
#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 << "Result:" << data << '\n';
}
二次
产出:
二次
Result:5
二次
另见
atomic_fetch_addatomic_fetch_add_explicit (C++11)(C++11) | adds a non-atomic value to an atomic object and obtains the previous value of the atomic (function template) |
---|
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。