1. 執行緒標識:
(1) 比較兩個執行緒id;
#include
intpthread_equal(pthread_t tid1, pthread_t tid2);
ret-若相等則返回非0值,否則返回0值
(2) 獲取執行緒自身id;
#include pthread_t pthread_self(void);
ret-呼叫執行緒的執行緒id
2. 執行緒的建立:
#include
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
void pthread_exit(void *rval_ptr);
rval_ptr是乙個無型別指標,與傳遞給啟動例程的單個引數類似,程序中的其他執行緒可以通過呼叫pthread_join函式訪問到這個指標;
#include
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
intpthread_cancel(pthread_t tid);
ret-成功返回0 失敗返回錯誤碼
函式使得由tid標識的執行緒行為表現為如果呼叫了引數是pthread_canceld的pthread_exit函式,但是,執行緒可以選擇忽略取消方式或者是控制取消方式。函式並不等待執行緒終止,它僅僅是提出請求;
5. 執行緒清理處理函式:
#include
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則函式不被呼叫;
注意正常從執行緒返回的時候,不會呼叫該清理函式;
Linux多執行緒 3個子執行緒輪流執行
迅雷筆試題 編寫乙個程式,開啟3個執行緒,這3個執行緒的id分別為a b c,每個執行緒將自己的id在螢幕上列印10遍,要求輸出結果必須按abc的順序顯示 如 abcabc 依次遞推。程式 include include const intthread number 3 子執行緒的互斥量和條件變數 ...
獲取子執行緒的執行結果
public class thread implements runnable private static class task implements callable public static void main string args throws executionexception,in...
Future獲取子執行緒的執行結果
runnable的缺陷 functionalinte ce public inte ce runnable callable介面類似於runnable,被其他執行緒執行的任務 實現call方法,有返回值 functionalinte ce public inte ce callable callab...