C++ 实现多线程
#include <thread>
#include <mutex>
#include <vector>
#include <iostream>
#include <algorithm>
#include <functional>
std::mutex my_lock;
void add(int &num, int &sum){
while(true){
std::lock_guard<std::mutex> lock(my_lock);
if (num < 100){ //运行条件
num += 1;
sum += num;
}
else { //退出条件
break;
}
}
}
int multiThread(){
int sum = 0;
int num = 0;
std::vector<std::thread> ver; //保存线程的vector
for(int i = 0; i < 20; ++i){
std::thread t = std::thread(add, std::ref(num), std::ref(sum));
/*emplace_back()函数向容器中中加入临时对象, 临时对象原地构造,没有赋值或移动的操作。*/
ver.emplace_back(std::move(t)); //保存线程
}
/*mem_fn()把可以从成员指针生成一个可调用对象*/
std::for_each(ver.begin(), ver.end(), std::mem_fn(&std::thread::join)); //join
std::cout << sum << std::endl;
}