fetch_add是一个原子操作,这个操作获取一个原子类型的当前值,将给定的递增值添加到这个原子值,然后返回原始的未递增的值。
将val添加到这个原子值中,并返回操作前的值。
整个操作是原子性的(原子性的读-修改-写操作):从读取(返回)值到此函数修改值的时刻,该值不受其他线程的影响。
此成员函数仅在整数(1)和指针(2)类型(bool除外)的原子特化中定义。
如果第二个参数使用默认值,则此函数等效于atomic::operator+=。
#include <thread>
#include <iostream>
#include <vector>
#include <functional>
#include <atomic>
using namespace std;
void func(atomic<int>& counter)
{
for (int i = 0;i < 10000;++i){
//++counter;
counter.fetch_add(1);
}
}
int main()
{
//int counter = 0;
atomic<int> counter(0);
vector<thread> threads;
for(int i = 0;i<10;++i){
threads.push_back(thread{func,ref(counter)});
}
for(auto& t :threads){
t.join();
}
cout << "Result = " << counter << endl;
return 0;
}
程序输出:Result = 100000