Linux之執行緒

2021-06-17 00:39:49 字數 1862 閱讀 3907

一、執行緒標識

每個執行緒有乙個執行緒id。程序id在整個系統中是唯一的,但執行緒id不同,執行緒id只有在它所屬的程序環境中有效。

執行緒id用pthread_t資料型別來表示,可以用乙個結構來代表pthread_t資料型別。

#include

int pthread_equal(pthread_t tid1, pthread_t tid2);

返回值:若相等則返回非0值,否則返回0

執行緒可以通過呼叫pthread_self函式來獲得自身的執行緒id

#include

pthread_t pthread_self(void);

返回值:呼叫執行緒的執行緒id

二、執行緒建立

#include

int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void), void *restrict arg);

返回值:若成功則返回0,否則返回錯誤編號

當pthread_create成功返回時,由tidp指向的記憶體單元被設定為新建立執行緒的執行緒id。attr引數用於定製各種不同的執行緒屬性。

新建立的執行緒從start_rtn函式的位址開始執行。

新建立的執行緒可以訪問程序的位址空間,並且繼承呼叫執行緒的浮點環境和訊號遮蔽字,但是該執行緒的未決訊號集被清除。

三、執行緒終止

如果程序中的任一線程呼叫了exit、_exit或者_exit,那麼整個程序就會終止。與此類似,如果訊號的預設動作是終止程序,那麼,把該訊號傳送到執行緒會終止整個程序。

單個執行緒可以通過三種方式退出,在不終止整個程序的情況下停止它的控制流。

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);

返回值:若成功則返回0,失敗則返回錯誤編號

如果執行緒只是從它的啟動例程返回,rval_ptr將包含返回碼。如果執行緒被取消,由rval_ptr指定的記憶體單元就置為pthread_cancel。

執行緒可以通過呼叫pthread_cancel函式來請求取消同一程序中的其他執行緒。

#include

int pthread_cancel(pthread_t tid);

返回值:若成功則返回0,否則返回錯誤編號

執行緒可以安排它退出時需要呼叫的函式,這與程序可以用atexit()函式安排程序退出時需要呼叫的函式是類似的。處理程式記錄在棧中,它們的執行順序與它們註冊時的順序相反。

#include

void pthread_cleanup_push(void (*trn)(void *), void *arg);

void pthread_cleanup_pop(int execute);

當執行緒執行以下動作時呼叫清理函式:

1、呼叫pthread_exit函式

2、響應取消請求時

3、用非零execute引數呼叫pthread_cleanup_pop時

如果execute引數設定為0,清理函式將不被呼叫。

四、執行緒分離

#include

int pthread_detach(pthread_t tid);

返回值:若成功則返回0,否則返回錯誤編號

Linux之執行緒

不同程序之間切換,系統開銷很大,為了提高效率很多作業系統 windows和linux 都引入了輕量級程序lwp,即執行緒。因為同一程序下的執行緒共享相同的位址空間,所以 同一程序下的 執行緒之間切換系統開銷小效率高。在linux下程式設計,不嚴格區分程序與執行緒,將它們都視為任務,用結構體task ...

Linux之執行緒小議

說到執行緒概念,必須先說明程序。程序是乙個執行中的程式,在作業系統中,乙個程式執行起來後就會被載入到記憶體中。作業系統建立了乙個程序描述符 pcb 對程式的執行進行描述控制。因此程序就是pcb,在linux下用task struct結構體來描述。linux系統下,用程序pcb來模擬線程,因此linu...

Linux之執行緒(1)

今天講下linux執行緒這塊的知識,我想很多人應該都知道多執行緒的重要性,現在多執行緒被運用在專案中的次數越來越多,而且面試中多執行緒也是必問的,所以要引起我們足夠的重視將這塊的知識學紮實。在說執行緒之前我們不得不提到程序,從使用者角度來說 程序是執行中的程式 作業系統角度來說 程序是作業系統對執行...