C 11多執行緒 detach和join的區別

2021-10-14 03:57:44 字數 1632 閱讀 6501

多執行緒程式設計是必須要掌握的,以前多執行緒基本是靠系統api或者第三方庫完成的,比如windows的api函式createthread,linux建立執行緒函式pthread_create,但是這樣編寫的**不可移植,不能跨平台,比如windows的多執行緒程式拿到linux下是跑不起來的,相反也一樣,很不方便,然而c++11語言本身支援多執行緒,和平台無關,下面就來簡單認識多執行緒

# include# include//c++11本身支援的多執行緒,需包含該標頭檔案

using namespace std;

void thread1();//子執行緒1(可呼叫物件作為執行緒的入口)

試著不呼叫join和deteach

接下來主要講detach

由於函式引數涉及到值傳遞和引用傳遞,所以問題就來了,看下面**

# include# includeusing namespace std;

class a

{public:

//型別轉換建構函式

再把join改為detach,看看主線程結束子執行緒沒結束是什麼結果

看看會輸出什麼

為什麼呢?仔細思考,之前傳入aobj,在執行thread物件t的建構函式時,我們就拷貝aobj的臨時物件,注意注意,是在構造thread物件的時候就拷貝,這時thread t(fun,i,aobj)語句還沒執行完,所以會列印出很多資訊,但是此時換成了int型變數b,構造thread物件時不會將b轉換成a物件,而是在構造子執行緒,將引數i,b傳遞給fun時,才會對b進行轉換,而由於主線程中**較少,很快就結束了,甚至子執行緒還未構造main執行緒就結束了,所以才會有上面這種情況,

C 11 多執行緒

新特性之描述 雖然 c 11 會在語言的定義上提供乙個記憶體模型以支援執行緒,但執行緒的使用主要將以 c 11 標準庫的方式呈現。c 11 標準庫會提供型別 thread std thread 若要執行乙個執行緒,可以建立乙個型別 thread 的實體,其初始引數為乙個函式物件,以及該函式物件所需要...

c 11 多執行緒

1.多執行緒的原理 同一時間內,cpu只能處理1條執行緒,只有1條執行緒在工作 執行 多執行緒併發 同時 執行,其實是cpu快速地在多條執行緒之間排程 切換 如果cpu排程執行緒的時間足夠快,就造成了多執行緒併發執行的假象。思考 如果執行緒非常非常多,會發生什麼情況?cpu會在n多執行緒之間排程,c...

C 11 多執行緒

2011 年 c 迎來重大的改革 語言層面上承認了 多執行緒 程式的存在 加入了 thread 多執行緒支援庫,內容豐富 功能強大。首先從我個人理解角度粗鄙的理解一下多執行緒。多執行緒眾所周知 切割時間片的多程式併發執行,大多數的計算機都支援多執行緒併發的硬體支援。這可能是最簡單的多執行緒程式了。多...