乙個程序中的所有執行緒都可以訪問程序的組成部件,如檔案描述符和記憶體。
不管在什麼情況下,只要單個資源需要在多個使用者間共享,就必須處理一致性問題。
每個執行緒都包含表示執行環境所必須的資訊,其中包括程序中表示執行緒的執行緒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所特...