C++11多线程(1)

C++11引入了内置的多线程支持,提供thread类,允许编写跨平台的多线程程序。thread类的join()和detach()函数用于启动线程。join()会阻塞主线程,直到子线程结束;detach()则使子线程与主线程分离,两者独立执行。在实际应用中,根据需求选择合适的启动方式,joinable()函数可用于检查线程是否可以join或detach。
摘要由CSDN通过智能技术生成

        C++11中添加了duox多线程类,编写C++程序可以直接使用C++11中的多线程库,不必依赖于平台多线程,这样可以方便写出夸平台的多线程程序。多线程可以最大化利用计算机资源,提高代码的运行效率。

        C++11中thread类提供两个成员函数,join()和detach()函数。这两个函数用来启动创建的线程。但是两者zhij之间存在区别:join()启动的线程会阻塞主线程,当子线程运行结束后才会运行主线程。相比之下detach()函数是启动zixi子线程,并且让子线程和主线程进行分离,子线程和主线程各运行各的,在代码层次上,两个线程并不存在谁阻塞谁,很可能主线程已经运行结束了子线程还在运行。

使用join()启动线程

#include <iostream>
#include <thread>		  //1

using namespace std;
//2
void SonThread()
{
	cout << "子线程开始" << endl;
	cout << "子线程退出"<<endl;
}

int main()
{
	thread demo(SonThread); //3
	demo.join();			//4
	cout << "主线程运行结束" << endl;
	system("Pause");
	return 0;
}

创建多线程过程:

1、包含头文件#include<thread>

2、创建线程函数

3、创建线程对象

4、启动线程

使用detach()创建线程

#include <iostream>
#include <thread>		  //1

using namespace std;
//2
void SonThread()
{
	cout << "子线程开始" << endl;
	cout << "子线程退出"<<endl;
}

int main()
{
	thread demo(SonThread); //3
	demo.detach();			//4
	cout << "主线程运行结束" << endl;
	system("Pause");
	return 0;
}

从上面的执行结果可以看出,join()启动的线程将主线程阻塞;detach()启动的线程不会阻塞主线程,主线程与子线程会无序执行,直至程序执行完毕。

启动线程时,join()与detach()只能使用一个函数,使用了其中一个就不能使用另一个,有一个重要的函数可以进行判断,joinable()函数,如果已经使用了join()或detach()那么joinable()返回false,否则返回true。

#include <iostream>
#include <thread>		  //1

using namespace std;
//2
void SonThread()
{
	cout << "子线程开始" << endl;
	cout << "子线程退出"<<endl;
}

int main()
{
	thread demo(SonThread); //3
	demo.join();			//4
	if (!demo.joinable())
	{
		cout << "demo不准再启动" << endl;
	}
	cout << "主线程运行结束" << endl;
	system("Pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值