atomic和thread是不分家的,C++11新标准之后,原子类型和线程的创建变得更加简单,简单的数据操作可以不设计互斥锁,不用那么担心操作资源死锁或者数据不一致的问题。
#include "stdafx.h"
#include<atomic>
#include <thread>
#include <iostream>
std::atomic<int> a(10);
std::atomic_llong total = {0};
void funCount(int)
{
for (long long i = 0; i <= 10LL; i++)
{
total+=i;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
std::thread t1(funCount,0);//0是funCount 声明的参数。
std::thread t2(funCount,0);
t1.join();
t2.detach();
//t2.join();
;
std::cout<<__FUNCTION__<<":"<<total<<"\t"<<a.is_lock_free()<<std::endl;
total.store(120);
std::cout<<__FUNCTION__<<":"<<total<<"\t"<<a.is_lock_free()<<std::endl;
return 0;
}
__FUNCTION__ 是vs下实现的__func__
跨平台的话需要使用预编译处理。