#include<iostream>
#include<thread>
using namespace std;
void func()
{
cout << "子线程开始了" << endl;
cout << "......" << endl;
cout << "子线程结束了" << endl;
}
int main()
{
cout << "主线程开始了" << endl;
thread th(func);
th.join();
cout << "主线程结束了" << endl;
getchar();
return 0;
}
输出:
分析:
主线程先执行,到了th.join()时阻塞住,创建了一个新的子线程,执行子线程,子线程执行完,阻塞解除,执行主线程至结束。
对以上代码进行改动:
#include<iostream>
#include<thread>
using namespace std;
void func()
{
cout << "子线程开始了" << endl;
cout << "......" << endl;
cout << "子线程结束了" << endl;
}
int main()
{
cout << "主线程开始了" << endl;
thread th(func);
th.detach();
cout << "主线程结束了" << endl;
getchar();
return 0;
}
输出结果:
分析:
把join换成detach作用是使得主线程不会阻塞等待子线程执行结束。也就是说主线程可以先执行结束。而在子线程中的thread对象会被C++运行时库接管,也就是说运行时库负责清理子线程相关的资源。
注意点:
正对一个线程,一旦调用了detach,则不能再次调用join,否则会导致程序运行异常。
利用joinable可以判断是否可以调用join或者detach
原文:https://www.cnblogs.com/SunShine-gzw/p/14399071.html