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...