程序运行起来,会生成一个进程,该进程所属的主线程开始自动运行
主线程从main()开始执行,自己创建的线程,也需要从一个函数开始运行(初始函数),一旦这个函数运行完毕,就代表线程结束。
整个进程是否执行完毕的标志是,主线程是否执行完,如果其它子线程还没有执行完毕,一般情况下那么这些子线程也会被强行终止。
一个书写良好的程序,应该是主线程等待子线程执行完毕后,自己才能最终退出
一般主线程是用来线程调度的,不执行操作。
传统多线程程序主线程要等待子线程执行完毕,然后再自己退出
detach:分离,也就是主线程不和子线程汇合
为什么引入detach():我们创建了很多子线程,让主线程逐个等待子线程结束,这种编程方法不太好,所以引入了detach()。 一旦detach后,与这个主线程关联的thread对象就会失去与这个主线程的关联,这个子线程相当于被C++运行时刻接管了,当这个子线程执行完成后,由运行时库负责清理该线程相关的资源(守护线程)。
joinable():判断是否可以成功使用join()或者detach()的
#include<iostream>#include<thread>#include<unordered_map>using namespace std;int aa = 0;//自己创建的线程也要从一个函数开始void myPrint(){aa = 11;}int main(){int i = 99;//创建一个线程thread myThreat(myPrint);//阻塞主线程,让主线程等待子线程执行完毕,然后子线程和主线程汇合,然后主线程再往下走myThreat.detach();cout << aa << endl;//myThreat.join();return 0;}
