程序fork的兩個問題:
1. fork過於昂貴,需要把父程序的記憶體映像拷貝到子程序
2. fork返回之後父子程序之間資訊的傳遞需要程序間通訊(ipc)機制,子程序向父程序返回資訊較困難
執行緒可稱為輕權程序。
同一程序內的不同執行緒共享相同的全域性記憶體,除此之外還共享:
程序指令、大多數資料檔案、開啟的檔案(描述字)、訊號處理函式和訊號處置、當前工作目錄、使用者id和組id
每個執行緒有各自的:
執行緒id、暫存器集合(包括程式計數器和棧指標)、棧(用於存放區域性變數和返回位址)、errno、訊號掩碼、優先順序
以下為unix中posix執行緒,有時稱為pthread,的一些基本函式:
標頭檔案: #include
1. int pthread_creat(pthread_t *tid, const pthread_attr_t *attr, void *(* func) (void *), void *arg)
功能:建立執行緒(當乙個程式由exec執行時,初始執行緒或者主線程即被建立)
返回值: 建立成功,返回0; 建立失敗,返回正e***值(與套接字返回值區別)
引數:pthread_t *tid: 執行緒id標識,資料型別為pthread_t(通常為unsigned int),若執行緒成功建立,其id通過tid指標返回;
const pthread_attr_t *attr: 建立執行緒是可通過初始化乙個取代預設設定的pthread_attr_t變數指定執行緒的一些屬性,如:優先順序、初始棧大小、是否應該稱為乙個守護程序等。通常情況下採取預設設定,將attr引數定義為空指標;
void *(* func) (void *)及void *arg:指定程序要執行的函式及該函式的引數。程序通過呼叫該函式開始執行,通過顯式的呼叫pthread_exit()或者隱式的讓該函式返回值結束。
注意: func及arg的宣告
func:指向的函式作為引數接受乙個通用指標(void *),又作為返回值返回乙個通用指標(void *)。即我們可以把乙個指標傳遞給執行緒,又允許執行緒返回乙個指標
2. int pthread_join(pthread_t tid, void **status)
功能:等待乙個給定執行緒終止
返回值:成功0, 出錯返回正e***值
引數:pthread_t tid:要等待執行緒的tid
void **status:若status指標為空,來自所等待執行緒的返回值(乙個指向某物件的指標)將存入status所指向的位置
3.pthread_t pthread_self(void)
功能:每個執行緒都有乙個在所屬程序內標識自身的id,使用pthread_self獲取自身執行緒id
ps:對比執行緒及unix程序,pthread_self類似於getpid
4. int pthread_detach (pthread_t tid)
功能:將指定執行緒轉變為脫離狀態
返回值:成功返回0,失敗返回正e***值
ps:乙個執行緒或者是可匯合的(joinable,預設值),或者是脫離的(detached)。當乙個可匯合的執行緒終止時,它的執行緒id和退出狀態將留到另乙個執行緒對它呼叫pthread_join。脫離執行緒卻象守護程序:當它們終止的時,所有相關資源都被釋放,我們不能等待它們終止。如果乙個執行緒需要知道另乙個執行緒什麼時候終止,那就最好保持第二個執行緒的可匯合狀態。
本函式通常由想讓自己脫離的執行緒呼叫: pthread_detach (pthread_self())
5.void pthread_exit(void *status)
功能:終止乙個執行緒
無返回值
ps:若本執行緒未曾脫離,其執行緒id和退出狀態將一直留存到呼叫程序內的某個其他執行緒對它呼叫pthread_join
指標status不能指向區域性於呼叫執行緒的物件,因為執行緒終止時這樣的物件也消失
UNIX高階程式設計 執行緒
第11章執行緒 unix作業系統中多執行緒的存在允許同一時間處理多件事情 執行緒包含了表示程序內執行環境必需的資訊,其中包括程序中標識現場的執行緒id,一組暫存器值,棧,排程優先順序和策略等等 11.1 執行緒標識 pthread id include int pthread equal pthre...
《UNIX環境高階程式設計》 UNIX基礎知識
一 unix體系結構 1 unix系統的體系結構 p1 圖1 1 2 核心的介面被稱為系統呼叫。公用函式構建在系統呼叫介面之上,應用程式即可食用公用函式庫,也可使用系統呼叫。二 登入 1 口令檔案 etc paaswd由7個冒號分隔的字段組成,依次是 登入名 加密口令 數字使用者id 數字組id 注...
Unix環境多執行緒程式設計 二
資料定義標頭檔案 usr include bits pthreadtypes.h pthread attr t 執行緒屬性。屬性物件主要包括是否繫結 是否分離 堆疊位址 堆疊大小 優先順序 屬性值不能直接設定,須使用相關函式進行操作 每個屬性都有屬性名,可以單獨通過 pthread attr set...