頭文件
#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())也是可以的