多线程编程基本概念:并发、并行
线程、进程
同步、互斥
并发:宏观上线程同时执行,微观上线程交替执行,也即基本单位为一个时间段
并行:同一时刻,多个线程同时执行,也即以时间点为基本单位
C++11标准库中提供了多线程库,使用#include<thread>来引用
#include <iostream>
#include<thread>
using namespace std;
//void hello(int i)
//{
// cout << i<< endl;
//}
int main()
{
for(int i=0;i<4;i++)
{
auto fun=[i](int i){cout<<i<<endl;};
thread t(fun,i);
t.detach();//主线程无需等待新线程完成,便可继续执行
// t.join();//主线程需等待新线程执行完,方可继续执行
cout<<"thread:"<<t.get_id()<<endl;
}
return 0;
}
- 向线程函数传递参数,需要注意的是线程默认是以拷贝的方式传递参数的,当期望传入一个引用时,要使用
std::ref
进行转换 - 线程是movable的,可以在函数内部或者外部进行传递
- 每个线程都一个标识,可以调用
get_id
获取