C++多线程(一)

#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

 

posted @ 2021-02-12 18:14  sunshine_gzw  阅读(148)  评论(0编辑  收藏  举报