1. 程式人生 > >C++11多執行緒(1)

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