1. 程式人生 > >多執行緒pthread_join()的兩種作用

多執行緒pthread_join()的兩種作用

pthread_join()函式原型:

int pthread_join(pthread_t thread, void **retval);
args:
    pthread_t thread: 被連線執行緒的執行緒號
    void **retval   : 指向一個指向被連線執行緒的返回碼的指標的指標
return:

    執行緒連線的狀態,0是成功,非0是失敗

當呼叫 pthread_join() 時,當前執行緒會處於阻塞狀態,直到被呼叫的執行緒結束後,當前執行緒才會重新開始執行。當 pthread_join() 函式返回後,被呼叫執行緒才算真正意義上的結束,它的記憶體空間也會被釋放(如果被呼叫執行緒是非分離的)。這裡有三點需要注意:

  • 被釋放的記憶體空間僅僅是系統空間,你必須手動清除程式分配的空間,比如 malloc() 分配的空間。
  • 一個執行緒只能被一個執行緒所連線。
  • 被連線的執行緒必須是非分離的,否則連線會出錯。

所以可以看出pthread_join()有兩種作用:

  1. 用於等待其他執行緒結束:當呼叫 pthread_join() 時,當前執行緒會處於阻塞狀態,直到被呼叫的執行緒結束後,當前執行緒才會重新開始執行。
  2. 對執行緒的資源進行回收:如果一個執行緒是非分離的(預設情況下建立的執行緒都是非分離)並且沒有對該執行緒使用 pthread_join() 的話,該執行緒結束後並不會釋放其記憶體空間,這會導致該執行緒變成了“殭屍執行緒”。