天天看點

C++多線程join,detach

一、介紹

主線程從main()函數開始執行,我們建立的線程也需要一個函數作為入口開始執行,是以第一步先初始化函數。整個程序是否執行完畢的标志是主線程是否執行完畢,一般情況下,如果想要保持子線程的運作狀态,那麼要主線程保持運作

二、使用

 join(),阻塞主線程,等待子線程執行完畢後,才到主線程執行。

detach(),分離主線程,主線程和子線程各走各的,是以會出現多次運作會發現,運作結果可能不同,這時候需要考慮一個問題,主線程如果執行完了,子線程還沒跑完,這就可能出現一定問題了。

joinable(),判斷是否使用了join()或者detach(),是傳回false,否傳回true。

#include <iostream>
#include <thread>
void my_thread()
{
    for (int i = 1; i <= 5; i++)
    {
        cout << "my_thread" << i << endl;
    }
}
int main()
{
    thread my_threadObj(my_thread);  //建立一個子線程,并傳入子線程的函數入口my_thread
    if (my_threadObj.joinable())     //傳回true代表沒有使用join()或者detch()
    {
        my_threadObj.join();       //阻塞主線程,并讓主線程等待子線程執行完
    }
    else
    {
        return -1;
    }
  //my_threadObj.detach();      //分離主線程,子線程與主線程各自運作,是以每次運作結果可能不同
    for (int i = 1; i <=5; i++)
    {
        cout << "main_thread" << i << endl;
    }
    return 0;
}
           

運作結果

C++多線程join,detach
void my_thread()
 {
	 for (int i = 1; i <= 5; i++)
	 {
		 cout << "my_thread" << i << endl;
	 }
 }
 int main()
 {
	 thread my_threadObj(my_thread);  //建立一個子線程,并傳入子線程的函數入口my_thread

	 my_threadObj.detach();      //分離主線程,子線程與主線程各自運作,是以每次運作結果可能不同
	 for (int i = 1; i <= 5; i++)
	 {
		 cout << "main_thread" << i << endl;
	 }
     return 0;
}
           

運作結果

C++多線程join,detach

參考:

C++多線程基礎學習筆記(二) - main(0) - 部落格園

c++

繼續閱讀