在C++中,支持了多线程,下面就来学习一下C++中的线程库thread:
先来看下面的代码:
#include <thread>
#include <atomic>
#include <mutex>
using namespace std;
unsigned long sum;
void fun(size_t num)
{
for (size_t i = 0; i < num; i++)
{
sum++;
}
}
int main()
{
thread t1(fun, 1000000);
thread t2(fun, 1000000);
//当这个数很大的时候,就可以看到多线程对共享数据的操作就会出错
t1.join();//join用来等线程结束后,回收创建线程的资源
t2.join();
cout << sum << endl;
return 0;
}
看到以下结果:对于我们预期的结果应该是t1对sum++1000000,t2对sum++1000000,应该得到2000000,但结果并不是
因为多线程对共享数据操作的时候,访问数据不安全(线程安全)的问题,导致了sum并没有按照预期的结果进行