執行緒建立以及執行緒控制

2021-09-27 02:40:24 字數 2383 閱讀 1352

在linux下pcb模擬實現程序,通俗的說就是乙個大的pcb下有很多小的pcb,稱為輕量級程序。

在乙個程序中有多個pcb,而這些所有的pcb共用同乙份虛擬位址空間。而這些pcb共同基層構成乙個pcb組,乙個執行緒組就為乙個程序。

3.乙個執行緒是程式執行的基本單位,程序是資源排程的基本單位。

執行緒是cpu呼叫的基本單位。

函式呼叫棧

暫存器 (不是硬體,而是程式執行資訊等等)

訊號遮蔽字(訊號是發給程序的,而乙個訊號發給乙個程序,只要乙個執行緒處理就行) ,errno(防止相互影響), 執行緒id, 排程優先順序

共享虛擬位址空間,檔案描述符表 ,當前工作路徑,使用者id,組id,每種訊號處理的方式

多執行緒任務的優缺點:

多執行緒共用程序大部分資源

1.執行緒間通訊更加方便,除了程序通訊的方式外還有全域性資料/傳參等。

2.建立銷毀乙個現成的成本較程序更加低

3.執行緒間的排程較於程序更低

缺點:執行緒之間缺乏訪問控制,有些系統呼叫/異常針對的是整個程序,穩定性比程序的低。例如乙個段錯誤所有程序就掛了。而程序在處理可能發生錯誤的時候可以用子程序去,子程序掛了父程序還在,還可以處理。

1.在linux下作業系統並沒有提供執行緒的控制系統呼叫介面;因此大佬封裝了一套程序庫,在linux下在三號手冊中。

2.使用庫函式實現建立的執行緒稱之為使用者態執行緒,這個使用者態執行緒在核心中使用乙個輕量級程序實現排程。

3.linux下的程序:使用者態執行緒+輕量級程序

int

pthread_create

(pthread_t *thread,

const pthread_attr_t *attr,

void*(

*start_routine)

(void*)

,void

*arg)

;

thread:用於獲取執行緒id :執行緒位址空間在整個虛擬位址空間中的首位址

attr: 設定執行緒屬性,通常置null

start_routine:執行緒的入口函式(函式執行完畢執行緒退出)

*arg: 傳入引數

返回值:成功返回0,失敗返回錯誤碼

當執行緒建立後可以用:ps-esl 檢視執行緒資訊

執行緒終止:

return不能再主函式中使用,主函式return 會直接退出程序

pthread_exit(void *retval);退出執行緒自身,誰呼叫誰退出 retval為返回值

處於joinable屬性的執行緒必須被等待,否則造成資源洩露

int pthread_join(pthread_t thread,void** val) 等待指定執行緒退出 val未返回值

// 通過這個就可以明白堆上申請的記憶體不會被程式釋放掉

// return 和 exit 都可以讓程式退出

// pthread_cancel(pthread_t tid) 可以讓任意執行緒退出

// pthread_detach(pthread_t tid) 將執行緒設定datach屬性 這時

// 如果進行pthread_join(pthread_t tid, void* ar); 相當於

// 不執行操作

// 一旦主線程退出那麼所有執行緒都退出

#include

#include

#include

#include

void

*pthread_1

(void

* agr)

void

*pthread_2

(void

* arg)

void

*pthread_3

(void

* arg)

return

null;}

void

*pthread_4

(void

* arg)

}void

*pthread_5

(void

* arg)

intmain()

#include

#include

#include

pthread_mutex_t m;

void

*runodd

(void

*d)}

void

*runeven

(void

*d)}

intmain()

Linux 執行緒控制 執行緒建立

作業系統並沒有提供執行緒控制的相關介面,大佬分裝了一套執行緒控制介面。執行緒裡我們用庫函式,所以說這套介面建立的執行緒是使用者態執行緒,並且這個使用者態執行緒在作業系統中對應了乙個輕量級程序。功能 建立 個新的執行緒 原型 int pthread create pthread t thread,co...

執行緒控制 join執行緒

在我們做專案的時候時常會有這樣的一種需求 我們需要執行兩個方法,乙個方法要等另乙個方法執行完才能執行,這樣的狀況放到多執行緒中要怎麼實現呢?今天就來看看多執行緒中的join方法。我們的均方法通常是把乙個大問題分成許多小問題,每個小問題分配乙個執行緒,當所有的小問題都得到處理後,在呼叫主線程來進一步操...

執行緒 之 執行緒控制

下面有幾種方法可以很好的控制線程的執行。1.join 執行緒控制 2.後台執行緒 守護執行緒 3.sleep執行緒睡眠 4.yield執行緒讓步 1.join 執行緒控制。thread提供了讓乙個執行緒等待另外乙個執行緒完成的方法 join 方法 意思 當在a程式執行流 執行緒 中呼叫b執行緒的ji...