對pthread join的理解

2021-07-06 01:59:27 字數 3461 閱讀 6477

linux中的應用 在

linux中,預設情況下是在乙個

執行緒被建立後,必須使用此函式對建立的執行緒進行資源**,但是可以設定threads attributes來設定當乙個執行緒結束時,直接**此執行緒所占用的系統資源,詳細資料檢視threads attributes。

其實在linux中,新建的執行緒並不是在原先的程序中,而是系統通過乙個

系統呼叫clone()。該系統呼叫copy了乙個和原先程序完全一樣的程序,並在這個程序中執行執行緒函式。不過這個copy過程和fork不一樣。 copy後的程序和原先的程序共享了所有的變數,執行環境。這樣,原先程序中的變數變動在copy後的程序中便能體現出來。

pthread_join的應用

pthread_join使乙個執行緒等待另乙個執行緒結束。

**中如果沒有pthread_join

主線程會很快結束從而使整個程序結束,從而使建立的執行緒沒有機會開始執行就結束了。加入pthread_join後,主線程會一直等待直到等待的執行緒結束自己才結束,使建立的執行緒有機會執行。

所有執行緒都有乙個執行緒號,也就是

thread id

。其型別為

pthread_t

。通過呼叫

pthread_self()函式可以獲得自身的執行緒號。

使用範例

乙個執行緒的結束有兩種途徑,一種是象我們下面的例子一樣,函式結束了,呼叫它的執行緒也就結束了;另一種方式是通過函式pthread_exit來實現。另外需要說明的是,乙個執行緒不能被多個執行緒等待,也就是說對乙個執行緒只能呼叫一次pthread_join,否則只有乙個能正確返回,其他的將返回esrch 錯誤。

在linux中,預設情況下是在乙個執行緒被建立後,必須使用此函式對建立的執行緒進行資源**,但是可以設定threads attributes來設定當乙個執行緒結束時,直接**此執行緒所占用的系統資源,詳細資料檢視threads attributes。

範例:// 子執行緒阻塞,等待訊號,然後輸出字串

// 主線程從鍵盤錄入字元,給子執行緒發訊號。 1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

#include

#include

#include

#include

#include

pthread_ttid; sigset_tset;

voidmyfunc()

staticvoid*mythread(void*p)

}

}

intmain()

elseif('q'==tmp)

else

continue;

}

return0;

}

執行結果:

// 如果輸入a,子執行緒列印"hello",主程式繼續等待輸入;

// 如果輸入q,主程式等待子程式結束。子執行緒列印"i will sleep 2 second and exit",並延時兩秒後結束。主線程隨之列印"finish",程式結束。

在前面我們提到,可以通過pthread_join()函式來使主線程阻塞等待其他執行緒退出,這樣主線程可以清理其他執行緒的環境。但是還有一些執行緒,更喜歡自己來清理退出的狀態,他們也不願意主線程呼叫pthread_join來等待他們。我們將這一類執行緒的屬性稱為detached。如果我們在呼叫pthread_create()函式的時候將屬性設定為null,則表明我們希望所建立的執行緒採用預設的屬性,也就是joinable。如果需要將屬性設定為detached,則參考下面的例子: 1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

void*start_run(void*arg)

intmain()

有,如果執行緒已經呼叫pthread_join()後,則再呼叫pthread_detach()則不會有任何效果。

多執行緒pthread join 的作用

pthread join 函式原型 int pthread join pthread t thread,void retval args pthread t thread 被連線線程的執行緒號 void retval 指向乙個指向被連線線程的返回碼的指標的指標 引數 thread 執行緒識別符號,即...

pthread join的使用方法 轉

pthread join使乙個執行緒等待另乙個執行緒結束。中如果沒有pthread join主線程會很快結束從而使整個程序結束,從而使建立的執行緒沒有機會開始執行就結束了。加入pthread join後,主線程會一直等待直到等待的執行緒結束自己才結束,使建立的執行緒有機會執行。所有執行緒都有乙個執行...

對委託的理解

在公司看了一上午的委託和事件 其實也沒有那麼久了,2個小時而已 終於明白了一些,看大家都沒有回帖,可能是因為我沒有設定加分,我的分太少了,剛來csdn。委託 我對委託的理解是這樣的 實現定乙個函式規範 簡單點說就是定義乙個函式的格式 如 public int test int a 委託裡是這樣寫的p...