5個基本線程函數
pthread_create函數
當一個程序啓動時,這個時候主線程也叫初始線程就建立了。其他線程則有pthread_create函數建立。
#include <pthread.h>
int pthread_create(pthread_t *tid, const pthread_attr_t *attr, void *(*func)(void *),void *arg); 返回:若成功則爲0,若出錯則爲正的Exxx值
每一個線程都有一個線程id(thread ID)標識,若是新的線程建立成功,其ID就經過tid指針返回。
而後咱們來看下最後一個參數,這個是線程執行的函數和參數,該線程經過調用這個函數開始執行,而後或者顯式的終止(經過調用pthread_exit),或者隱式的終止(經過讓該函數返回)。該函數的地址由func參數指定,該函數的惟一調用參數是指針arg。若是咱們須要傳遞多個參數,咱們就要把他們打包成一個結構,傳給這個參數。
pthread_join函數
能夠經過調用pthread_join函數等待一個給定線程終止.
#include <pthread.h>
int pthread_join(pthread_t *tid,void **status); 返回:若成功則爲0,若出錯則爲正的Exxx值
第一個參數tid就是須要等待的那個線程id,status這個參數若是非空,那麼來自所等待線程的返回值將存入由status指向的位置。
也就是說經過調用這個函數,咱們能夠獲取到該線程退出的狀態的數據,固然這個線程的狀態必須是可匯合的(joinable,默認值)
什麼意思呢?就是說若是某個線程的狀態是可匯合的(joinable),那麼別的線程就能夠經過pthread_join獲取到該線程的退出狀態和線程id,若是設置爲脫離的(detached),那麼當該線程終止時,全部相關資源所有釋放,咱們不能等待他們終止。
pthread_self函數
每一個線程都有一個在所屬進程內標識自身的ID,線程ID由pthread_create返回,咱們在上面那個函數中也用到了,每一個線程可使用pthread_self獲取自身的線程ID。
#include <pthread.h> pthread_t pthread_self(void); 返回:調用線程的線程ID
pthread_detach函數
在說pthread_join函數的時候咱們提到過線程的狀態,一種是可匯合的(joinable,默認值),一種是脫離的(detached),這個函數的做用就是把某個線程的狀態變爲脫離的(detached)。
#include <pthread.h>
int pthread_detach(pthread_t tid); 返回:若成功則爲0,若出錯則爲正的Exxx值
本函數經過由想讓本身脫離的線程調用,就如如下語句,
pthread_detach(pthread_self());
pthread_exit函數
讓一個線程終止的方法之一是調用pthread_exit。
#include <pthread.h>
void pthread_exit(void *status); 不返回到調用者
若是本線程不曾脫離,它的線程ID和退出狀態將一直留存到調用進程內的某個其餘線程對它調用pthread_join。