pthread_join

weixin_34344677發表於2012-02-16

函式簡介

函式pthread_join用來等待一個執行緒的結束。函式原型為:

extern int pthread_join (pthread_t__th, void **__thread_return);

第一個引數為被等待的執行緒識別符號,第二個引數為一個使用者定義的指標,它可以用來儲存被等待執行緒的返回值。這個函式是一個執行緒阻塞的函式,呼叫它的函式將一直等待到被等待的執行緒結束為止,當函式返回時,被等待執行緒的資源被收回。如果執行成功,將返回0,如果失敗則返回一個錯誤號。

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()函式可以獲得自身的執行緒號。