(拒絕自閉vs2010版本,不支援該標頭檔案)
#include
事先說明:
1.一般來說,子執行緒也要從乙個函式開始執行,所以建立乙個執行緒的同時,我們要宣告乙個函式
2.一般情況下,主線程執行完畢後,未完成的子執行緒會被系統強行關閉
方法一:宣告函式
首先宣告乙個子執行緒的函式,其次在主線程中定義乙個thread類指向這一子執行緒,即完成了子執行緒的建立,如例2-1
例2-1
#include
#include
//1.宣告乙個子執行緒的函式
void
func()
intmain()
tips:
1.std::thread()括號中宣告的是乙個可呼叫物件
2.注釋2中的語句執行的是,建立乙個執行緒,確定執行緒執行起點,並使其開始執行
方法二:建立類
方法三:lambda表示式
方法四:成員函式作執行緒函式
舉個例子
//先宣告乙個類
classa~
a()// 需要宣告乙個可呼叫物件
void
operator()
()}int
main()
一、join()
作用:阻塞主線程,讓主線程等待子執行緒執行完畢後,再繼續執行主線程。
再舉乙個例子3-1 (宣告了兩個執行緒func1和func2)
#include
#include
void
func1()
void
func2()
intmain()
tips:
多執行幾遍,發現輸出的結果並不是一樣的,這個例子另外說明的是,執行緒的處理順序是隨機的
二、detch()
分離主線程和子執行緒之間的關係,主線程的結束不再影響子執行緒的執行
分離之後,子執行緒留給後台執行,相當於子執行緒被c++執行時庫接管,子執行緒執行完畢後,由執行時庫負責清理該執行緒相關的資源
注:被分離之後,不能夠再使用join()方法
例子3-2
#include
#include
void
func1()
intmain()
std::cout <<
"main process is finished\n"
;return0;
}
我們發現,多執行幾遍,結果也不一樣
三、joinable()
判斷是否可以使用join()或detch()方法,可以返回ture,不可以返回false
c 多執行緒程式設計筆記2
同步的意思是在多執行緒程式中,為了使兩個或多個執行緒之間,對分配臨界資源的分配問題,要如何分配才能使臨界資源在為某一線程使用的時候,其它執行緒不能再使用,這樣可以有效地避免死鎖與髒資料。髒資料是指兩個執行緒同時使用某一資料,造成這個資料出現不可預知的狀態!在 c 中,對執行緒同步的處理有如下幾種方法...
c 多執行緒程式設計(2)
1 建立事件物件 handle createevent lpsecurity attributeslpeventattributes sdboolbmanualreset reset typeboolbinitialstate initial statelpctstrlpname object na...
多執行緒程式設計2
訊號量同步 include include include include include 訊號量函式定義 include void thread fun void arg sem t bin sem define worksize 1024 char workarea worksize int m...