C++11多线程(1)

        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;
}

猜你喜欢

转载自blog.csdn.net/u012967763/article/details/82834518