筆記 C 多執行緒程式設計(2)

2021-09-26 03:49:11 字數 1400 閱讀 5268

(拒絕自閉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...