#include #include #include std::mutex display_mutex; //使用互斥鎖
void foo(int i)
void multithread()
{ for (int i = 0; i < 4; i++)
{ std::thread thread(foo, i);
thread.detach(); //**執行緒資源(分離式)
std::cout 《輸出:
thread_func: id = 5960
, main:
0thread_func: id = 13540, 1
main:
main:
thread_func: id = 7684, 2
thread_func: id = 14252, 3
main:
在啟動了乙個執行緒(建立了乙個thread物件)之後,當這個執行緒結束的時候,我們如何去**執行緒所使用的資源呢?thread庫給我們兩種選擇:加入式(join())和分離式(detach())。值得一提的是,你必須在thread物件銷毀之前做出選擇,這是因為執行緒可能在你加入或分離執行緒之前,就已經結束了,之後如果再去分離它,執行緒可能會在thread物件銷毀之後繼續執行下去。
(1)detach這個詞的意思是分離的意思,對乙個thread物件使用detach()意味著從呼叫執行緒分理出這個新的執行緒,我們稱分離的執行緒叫做守護執行緒(daemon threads),之後也就不能再與這個執行緒互動。分離的執行緒會在後台執行,其所有權(ownership)和控制權將會交給c++執行庫。同時,c++執行庫保證,當執行緒退出時,其相關資源的能夠正確的**。
(2)join字面意思是連線乙個執行緒,意味著主動地等待執行緒的終止,join()是這樣工作的:在呼叫程序中join(),當新的執行緒終止時,join()會清理相關的資源,然後返回,呼叫執行緒再繼續向下執行。所以如果對之前的**再做修改如下:
void multithread()
{ for (int i = 0; i < 4; i++)
{ std::thread thread(foo, i);
thread.join(); //**執行緒資源(加入式)
std::cout 《輸出:
thread_func: id = 5692, 0
main:
thread_func: id = 7228, 1
main:
thread_func: id = 3368, 2
main:
thread_func: id = 8180, 3
main:
參考: c 實現多執行緒同步
執行緒同步是指同一程序中的多個執行緒互相協調工作從而達到一致性。之所以需要執行緒同步,是因為多個執行緒同時對乙個資料物件進行修改操作時,可能會對資料造成破壞,下面是多個執行緒同時修改同一資料造成破壞的例子 1 include 2 include 3 4void fun 1 unsigned int ...
C 多執行緒 實現示例
需求 在ros中,通過捕捉按鍵輸入完成飛機的模式切換,該方式比較適合多機一鍵起飛或者其他模式切換操作。簡單說明 採用的是c 標準庫提供的cin函式,但是這種方式為阻塞等待鍵盤按下,所以需要採用多執行緒或者多程序的方式,又採用了的是共享變數 標誌位 的想法,故在乙個程序中採用多執行緒即可。下面的示例給...
C 多執行緒的實現
支援多執行緒可謂是c 語言最大的變化之一.此前,c 只能利用作業系統的功能 unix族系統使用pthreads庫 或是例如openmp和mpi這些 庫,來實現多核計算的目標.c 本身並沒有提供任何多執行緒機制,但是在windows下,我們可以呼叫sdk win32 api來編寫多執行緒的程式,下面是...