Unix執行緒基礎程式設計pthread

2021-06-01 08:08:28 字數 1886 閱讀 7164

程序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...