使用 std::this_thread::sleep_for 编译时需要加上:
-std=c++0x -pthread -D_GLIBCXX_USE_NANOSLEEP
未使用原子变量可能引起竞争,导致最后的counter可能不等于10000:
#include <iostream>
#include <vector>
#include <thread>
using namespace std;
void func(int& counter)
{
for(int i=0;i<1000;++i)
{
++counter;
this_thread::sleep_for(chrono::milliseconds(1));
}
}
int main()
{
int counter = 0;
vector<thread> threads;
for(int i=0;i<10;++i)
{
threads.push_back(thread{func, ref(counter)});
}
for (int i=0;i<10;++i)
{
threads[i].join();
}
cout<<counter;
}
使用原子变量:
#include <iostream>
#include <vector>
#include <thread>
#include <atomic>
using namespace std;
void func(atomic<int>& counter)
{
for(int i=0;i<1000;++i)
{
++counter;
this_thread::sleep_for(chrono::milliseconds(1));
}
}
int main()
{
atomic<int> counter(0);
vector<thread> threads;
for(int i=0;i<10;++i)
{
threads.push_back(thread{func, ref(counter)});
}
for (int i=0;i<10;++i)
{
threads[i].join();
}
cout<<counter;
}