Linux線程基礎函數


1. 線程標識:

(1) 比較兩個線程ID;

#include <pthread.h>

int pthread_equal(pthread_t tid1, pthread_t tid2);

ret-若相等則返回非0值,否則返回0值

(2) 獲取線程自身ID;

#include <pthread.h>

pthread_t pthread_self(void);

ret-調用線程的線程ID

2. 線程的創建:

#include <pthread.h>

int pthread_create(pthread_t *restrict tidp, //返回線程的ID

           const pthread_attr_t *restrict attr, //線程屬性,默認為NULL

void *(*start_rtn)(void), //線程函數入口地址

void *restrict arg); //參數 ret-成功返回0 失敗返回錯誤編號

3. 線程的終止:

(1) 線程只是從啟動例程中返回,返回值是線程的退出碼;

(2) 線程可以被同一例程中的其他線程取消;

(3) 線程調用pthread_exit。

#include <pthread.h>

void pthread_exit(void *rval_ptr);

rval_ptr是一個無類型指針,與傳遞給啟動例程的單個參數類似,進程中的其他線程可以通過調用pthread_join函數訪問到這個指針;

#include <pthread.h>

int pthread_join(pthread_t thread, void **rval_ptr);

ret-成功返回0 否則返回錯誤編號

調用線程一直阻塞,知道指定的線程調用pthread_exit,從啟動例程中返回或者被取消;如果線程只是從他的啟動例程中返回,rval—_ptr將包含返回碼;如果線程被取消,由rval_ptr指定的內存單元就設置為PTHREAD_CANCELED.

如果線程已經處於分離狀態,pthread_t就會調用失敗,返回EINVAL。

如果對線程的返回值不感興趣,可以吧rval_prt設置為NULL。這種情況下,調用pthread_join將等待線程終止,但不獲取線程的終止狀態。

 

4. 線程取消:

#include <pthread.h>

int pthread_cancel(pthread_t tid);

ret-成功返回0 失敗返回錯誤碼

函數使得由tid標識的線程行為表現為如果調用了參數是PTHREAD_CANCELD的pthread_exit函數,但是,線程可以選擇忽略取消方式或者是控制取消方式。函數並不等待線程終止,它僅僅是提出請求;

 

5. 線程清理處理函數:

#include <pthread.h>

void pthread_cleanup_push(void(*rtn)(void*), void *arg);
void pthread_cleanup_pop(int execute); //調用刪除上次push的清理程序

當線程執行以下動作時調用清理函數,調用者參數為arg,清理函數rtn的調用順序是由pthread_cleanup_pus來安排的。

a. 調用pthread_exit;

b. 想用取消請求;

c. 用非零的execute參數調用pthread_cleanup_pop;

   如果execute=0則函數不被調用;

注意正常從線程返回的時候,不會調用該清理函數;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM