C++11多執行緒(1)
阿新 • • 發佈:2018-12-11
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;
}