C語言筆記 pthread_create pthread_join 和 pthread_detach

頭文件

#include<pthread.h>

pthread_create

int pthread_create(pthread_t *tidp, const pthread_attr_t *attr, (void*)(*start_rtn)(void*),void *arg);

第一個參數爲指向線程標識符的指針。

第二個參數用來設置線程屬性。

第三個參數是線程運行函數的起始地址。

最後一個參數是運行函數的參數。

若線程創建成功,則返回0。若線程創建失敗,則返回出錯編號,並且*thread中的內容是未定義的。

返回成功時,由tidp指向的內存單元被設置爲新創建線程的線程ID。attr參數用於指定各種不同的線程屬性。新創建的線程從start_rtn函數的地址開始運行,該函數只有一個萬能指針參數arg,如果需要向start_rtn函數傳遞的參數不止一個,那麼需要把這些參數放到一個結構中,然後把這個結構的地址作爲arg的參數傳入。

pthread_join

    int pthread_join(pthread_t thread, void **value_ptr);
    //thread:等待退出線程的線程號。
    //value_ptr:退出線程的返回值。

pthread_join使一個線程等待另一個線程結束。

代碼中如果沒有pthread_join主線程會很快結束從而使整個進程結束,從而使創建的線程沒有機會開始執行就結束了。加入pthread_join後,主線程會一直等待直到等待的線程結束自己才結束,使創建的線程有機會執行。

如果你的主線程,也就是main函數執行的那個線程,在你其他線程退出之前就已經退出,那麼帶來的bug則不可估量。通過pthread_join函數會讓主線程阻塞,直到所有線程都已經退出。

pthread_detach

int pthread_detach(pthread_t tid);

使線程脫離,更像是守護進程,線程終止時,所有的相關資源都被釋放,不能等待他們終止。pthread_join()函數的替代函數,可回收創建時detachstate屬性設置爲PTHREAD_CREATE_JOINABLE的線程的存儲空間。該函數不會阻塞父線程。pthread_join()函數用於只是應用程序在線程tid終止時回收其存儲空間。如果tid尚未終止,pthread_detach()不會終止該線程。當然pthread_detach(pthread_self())也是可以的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章