線程有關的函數都在頭文件#include<pthread.h>中。
一、創建線程
int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,void*(*start_rtn)(void),void *arg);
若成功則返回0,否則返回出錯編號。返回成功時,由tidp指向的內存單元被設置為新創建線程的線程ID。attr參數用於指定各種不同的線程屬性。新創建的線程從start_rtn函數的地址開始運行,該函數只有一個萬能指針參數arg,如果需要向start_rtn函數傳遞的參數不止一個,那麼需要把這些參數放到一個結構中,然後把這個結構的地址作為arg的參數傳入。
二、終止線程
1)void pthread_exit(void *retval);
此函數一般在線程中調用,用於退出線程,類似於exit。只不過exit是退出進程,當然也退出了該進程。參數為傳出,可用pthread_join獲得該參數。
2)進程執行完後,return
3)被另一個進程終止。
三、等待線程
int pthread_join(pthread_t tidp,void **retval);
tid為欲等待的線程id,即創建線程時的tidp。retval參數為接收線程結束時的返回值。
四、清除函數
pthread_cleanup_push(void(*func)(void*),void *arg);
代碼.....
.....
pthread_cleanup_pop(0或1);
清除函數為呼應使用,所包圍的代碼即為所保護的代碼。如果保護代碼中出現異常終止或使用pthread_exit都將執行函數指針func所指函數。其中arg為處理函數func的參數。
pthread_cleanup_pop中的0表示保護代碼執行完後,不執行處理函數func,1相反。