多執行緒pthread_join()的兩種作用
阿新 • • 發佈:2019-01-24
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()有兩種作用:
- 用於等待其他執行緒結束:當呼叫 pthread_join() 時,當前執行緒會處於阻塞狀態,直到被呼叫的執行緒結束後,當前執行緒才會重新開始執行。
- 對執行緒的資源進行回收:如果一個執行緒是非分離的(預設情況下建立的執行緒都是非分離)並且沒有對該執行緒使用 pthread_join() 的話,該執行緒結束後並不會釋放其記憶體空間,這會導致該執行緒變成了“殭屍執行緒”。