POSIX多執行緒程式設計學習篇之一(執行緒管理)

2021-08-05 19:33:17 字數 2771 閱讀 2094

首先來乙份最簡單的開胃篇**來認識多執行緒

#include#includevoid *thread_routine(void *arg)//子執行緒執行的函式

void main(int argc,char *argv)

一,pthread api 命名約定如下:

二,執行緒的建立、退出等函式介紹

pthread_create(thread,attr,function,arg)//執行緒的建立(執行緒結構變數,屬性,執行緒函式入口,執行緒函式引數)

pthread_exit(status)

pthread_attr_init(attr)

pthread_attr_destroy(attr)

乙個程序可以建立的執行緒最大數量取決於系統實現

執行緒屬性:

結束終止:

a, 執行緒從主線程(main函式的初始執行緒)返回。

b, 執行緒呼叫了pthread_exit函式,顯示的退出當前執行緒。

c, 其它執行緒使用 pthread_cancel函式結束執行緒。

d, 呼叫exec或者exit函式,整個程序結束。 如果

main()在其他執行緒結束前用pthread_exit()退出了,其他執行緒將會繼續執行。否則,他們會隨著main的結束而終止。

三,鏈結和分離

1,在任何乙個時間點上,執行緒是可結合的(joinable),或者是分離的(detached)。

joinable:能夠被其他執行緒收回其資源和殺死;在被其他執行緒**之前,系統資源是不釋放的。

當pthread_join()函式返回時,建立的執行緒才算終止。(系統預設)

detached:不能被其他執行緒**或殺死的,系統資源在它終止時由系統自動釋放。

執行緒的分離狀態決定乙個執行緒以什麼樣的方式來終止自己。在預設情況下執行緒是非分離狀態的。

2,常用函式如下:

(1)執行緒的阻塞和分離

int pthread_join(pthread_t tid, void**thread_return); //阻塞本地執行緒,直到設定的執行緒tid執行結束。

int pthread_detach(pthread_t tid); //設定分離狀態的方式

為了避免儲存器洩漏,每個可結合執行緒都應該要麼被顯示地**,即呼叫pthread_join;要麼通過呼叫pthread_detach函式被分離。

(2)設定和獲得分類狀態

pthread_attr_setdetachstate (attr,detachstate)

pthread_attr_getdetachstate (attr,detachstate)

其中detachstate引數可選為pthread_create_detached(分離執行緒)和 pthread _create_joinable(非分離執行緒)

(3)分離執行緒有個問題是,可能在pthread_create函式返回之前就終止了,就可能將執行緒id和系統資源移交給其他的執行緒使用,

這樣當前呼叫pthread_create的執行緒就得到了錯誤的執行緒號。(可以在被建立的執行緒裡呼叫pthread_cond_timewait函式避免)

3,設定分離狀態的方式

(1)呼叫 pthread_detach()函式

(2)建立執行緒時就將執行緒屬性設定為detached 狀態

首先宣告pthread_attr_t attr;

然後初始化attr---pthread_attr_init(&attr);

再然後設定執行緒類別---pthread_attr_setdetachstate(&attr,detachstatus);

最後執行緒create完畢後釋放attr--pthread_attr_destroy(&attr);

下面例子足以說明以上資訊

#include #include #define num_threads  (3) 

#define join_to_detach (1)//三個巨集只有乙個能為1,測試三種情況

#define only_join (0)

#define only_detach (0)

void *fun(void *arg)

//pthread_exit(null); }

int main (int argc, char *argv)

int main()

2,執行緒執行順序(1)執行緒的優先順序無法保障線程的執行次序。只不過優先順序高的執行緒獲取 cpu 資源的概率大一點而已.

(2)setitimer()和signal()。可以精確控制線程的執行時間。

如果沒有設定條件,是不能保證執行緒執行次序的,作業系統會自行隨機安排

併發程式設計之多執行緒篇之一

本節主要知識點包括三個方面 一 執行緒的含義 二 程序和執行緒的區別 三 開啟程序的兩種方式 1 什麼是執行緒和多執行緒?1 在傳統作業系統中,每個程序有乙個位址空間,而且預設就有乙個控制線程。執行緒顧名思義,就是一條流水線工作的過程 流水線的工作需要電源,電源就相當於cpu 而一條流水線必須屬於乙...

Posix多執行緒程式設計學習筆記(一) 執行緒基礎(2)

6 名稱 pthread detach 功能 使執行緒進入分離狀態。標頭檔案 include 函式原形 int pthread detach pthread t tid 引數 返回值 若成功則返回0,否則返回錯誤編號。7 名稱 pthread cancel 功能 取消同一程序中的其他執行緒 標頭檔案...

多執行緒程式設計之一

雖然c 包含了許多創新性特徵,但其中最激動人心的一點卻是它對多執行緒程式設計的內建支援。乙個多執行緒程式包含兩個或更多能夠同時進行的部分。這種程式的每一部分稱為乙個執行緒。1.多執行緒基礎 有兩種截然不同的多工處理 基於程序的和基於執行緒的。理解這兩者間的不同很重要。程序本質上是乙個正在執行的程式。...