码迷,mamicode.com
首页 > 编程语言 > 详细

C++多线程(一)

时间:2021-02-16 12:12:15      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:func   tac   接管   highlight   作用   异常   ace   pac   etc   

#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

 

C++多线程(一)

标签:func   tac   接管   highlight   作用   异常   ace   pac   etc   

原文地址:https://www.cnblogs.com/SunShine-gzw/p/14399071.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!