執行緒建立 終止

2021-10-04 13:46:33 字數 2538 閱讀 8285

乙個程序中的所有執行緒都可以訪問程序的組成部件,如檔案描述符和記憶體。

不管在什麼情況下,只要單個資源需要在多個使用者間共享,就必須處理一致性問題。

每個執行緒都包含表示執行環境所必須的資訊,其中包括程序中表示執行緒的執行緒id,一組暫存器檔案,棧,排程優先順序和策略,訊號遮蔽字,errno變數以及執行緒私有資料。程序的所有執行緒都是共享的,包括可執行**、程式的全域性記憶體和堆記憶體,開啟的檔案等。

posix執行緒的功能測試巨集是_posix_threads。可以通過條件編譯來在編譯時測試是否支援多執行緒。也可以通過吧_sc_threads常數呼叫sysconf函式,在執行時測試是否支援多執行緒。

程序的id在系統中唯一的,但執行緒id只在所屬程序的上下文中才有意義

執行緒id是pthread_t資料型別,他可能是無符號整型,也可能是乙個無符號長整型,或許是乙個pthread結構的指標型別,不同的實現不一樣。因此需要函式來對兩個執行緒id進行比較。

執行緒id比較函式:

#include

intpthread_equal

(pthread_t tid1,pthread_t tid2)

; 返回值:相等返回非零值,否則返回0

執行緒可以通過下面函式獲得自身執行緒id:

#include

pthread_t pthread_self

(void);

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

執行緒建立函式:

#include

intpthread_create

(pthread_t *restrict tidp,

const pthread_attr_t *restrict attr,

void*(

*start_rtn)

(void*)

,void

*restrict arg)

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

新執行緒建立成功,執行緒id被設定成tidp指向的記憶體單元,attr代表執行緒屬性,null表示預設屬性,start_rtn(函式指標)表示入口函式(返回值為void*,引數為void*的函式),arg代表需要入口函式的引數。

執行緒建立並不能保證哪個執行緒會先執行。新建立的執行緒可以訪問程序的位址空間,並且繼承呼叫執行緒的浮點環境和訊號遮蔽字,但是該執行緒的掛起訊號集會被清除。

pthread函式在呼叫失敗時會返回錯誤碼,但並不會向其他posix函式一樣設定errno。

如果程序中任意執行緒呼叫exit、_exit 或者 _exit,那麼程序就會終止。

單個執行緒可以通過三種方式退出:

(1)執行緒簡單的從啟動歷程中返回,返回值為執行緒的退出碼。

(2)執行緒可以被同一程序中的其他執行緒取消。

(3)執行緒呼叫pthread_exit。

#include

void

pthread_exit

(void

*rval_ptr)

;

rval_ptr引數是乙個無型別指標,程序中其他執行緒可以通過pthread_join函式訪問這個指標。

#include

intpthread_join

(pthread_t thread,

void

**rval_ptr)

; 返回值:成功返回0,否則返回錯誤編碼

呼叫執行緒被阻塞,知道執行緒用三種方式結束執行緒,rval_ptr所指資料為返回碼。rval_ptr為null,不獲取執行緒終止狀態。

如果執行緒已分離,呼叫join會失敗,返回 einval。

#include

intpthread_cancel

(pthread_t tid)

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

該函式會使指定的執行緒行為表現的向呼叫了引數為pthread_canceled的pthread_exit函式,但是,執行緒可以忽略取消或者控制如何被取消。注意,此函式並不等待執行緒終止,他僅提出請求。

#include

void

pthread_cleanup_push

(void

(*rtn)

(void*)

,void

*arg)

;void

pthread_cleanup_pop

(int execute)

;

#include

intpthread_detach

(ptread_t tid)

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

執行緒 執行緒建立與終止

include intpthread create pthread t restrict thread,const pthread attr t restrict attr,void start routine void void restrict arg 0,失敗返回錯誤號。0,失敗返回 1,而錯...

多執行緒程式設計 執行緒的建立和終止

1 引言 linux 系統下的多執行緒遵循posix 執行緒介面,稱為pthread 編寫linux 下的多執行緒程式,需要使用標頭檔案pthread.h 連線時需要使用庫libpthread.a 順便說一下,linux 下pthread 的實現是通過系統呼叫clone 來實現的。clone 是li...

多執行緒程式設計 執行緒的建立和終止

1 引言 linux系統下的多執行緒遵循posix執行緒介面,稱為pthread。編寫linux下的多執行緒程式,需要使用標頭檔案pthread.h,連線時需要使用庫libpthread.a。順便說一下,linux下pthread的實現是通過系統呼叫clone 來實現的。clone 是linux所特...