目的
多了實現多工處理方式。
多工處理
多建立幾個程序,能夠序列化的完成多個任務;以前我們說乙個程序就是乙個 pcb ,是作業系統對乙個執行中程式的描述。
而現在我們說的執行緒其實是程序中的一條執行流,該執行流在 linux 下通過 pcb 實現,因此實際上執行緒就是乙個 pcb, 然而 pcb 卻代表乙個程序,並且 linux 下的 pcb 共用乙個虛擬位址空間,相較於傳統 pcb 更加輕量化, 所以又稱為輕量化程序。(可以說乙個執行緒的集合 -> 執行緒組 就是乙個程序)
程序、多程序、多執行緒的具體描述圖
執行緒之間的獨有和共享
獨有:程序識別符號
暫存器訊號遮蔽字
棧errno (儲存系統呼叫完成後的錯誤編號的全域性變數,因為具有覆蓋性,所以獨有)
排程優先順序
共享:虛擬位址空間
檔案描述符
訊號處理方式
使用者id/組id/工作路徑
多執行緒 和 多程序之間的優缺點
多執行緒的優點
通訊靈活
建立和銷毀的成本低
同乙個程序中的各執行緒的排程成本低、切換更容易
執行緒的執行力度更加詳細
多程序的優點
穩定性更高
健壯性更高
二者缺點就是對方的優點。
執行緒控制的操作命令
1. 執行緒的建立
#include
// 標頭檔案
返回值: 成功 0 失敗 大於0的數
執行緒的排程順序取決於作業系統
intpthread_create
(pthread_t *thread,
const pthread_attr_t *attr,
void*(
*start_routine)
(void*)
,void
*arg)
;引數:
1> thread: 輸出型引數,用於獲取執行緒的tid(執行緒獨有的空間的首位址)
2> attr: 執行緒屬性,用於在建立時設定屬性,通常置null
3> start_routine: 函式指標,是執行緒入口函式,執行完後自動退出
4> arg: 通過執行緒入口函式,傳遞給執行緒引數,不用可置null
2.執行緒的等待
等待乙個執行緒的退出並獲取退出執行緒的返回值,**退出執行緒的資源
返回值: 成功 0 失敗 錯誤編號
intpthread_join
(pthread_t thread,
void
**retval)
;引數:
1> thread: 要等退出的執行緒的tid
2> retval: 乙個二級指標,用於返回退出執行緒的返回值
3. 執行緒分離
分離乙個執行緒,一定是對它的返回值不感興趣,不想獲取,或者不想等待執行緒退出
執行緒退出後自動釋放所佔資源,無需也不能夠被等待(執行緒等待 和 執行緒分離 是互斥關係,即二者只能存在乙個)
返回值: 成功 0 失敗 錯誤編號
intpthread_detach
(pthread_t thread)
引數:1
> thread: 所要分離執行緒的tid
4. 執行緒的退出
乙個執行緒的集合(執行緒組) 就是乙個程序,所以一旦程序退出,所有的執行緒都會退出
<
1>
return 退出
<
2>
void
pthread_exit
(void
*retval)
; retval: 要退出的執行緒的介面,誰呼叫就退出哪個執行緒
在主線程中呼叫退出的是主線程而非程序
<
3>
intpthread_cancel
(pthread_t thread)
; thread: 要取消執行緒的tid
1>執行緒取消的定義
一般情況下,執行緒在其主體函式退出的時候會自動終止,但同時也可以因為接收到另乙個執行緒發來的終止(取消)請求而強制終止。
2> 執行緒取消的語義
1 執行緒取消的方法是向目標執行緒發cancel訊號,但如何處理cancel訊號則由目標執行緒自己決定,或者忽略(當禁止取消時)、或者立即終止(當在取消點 或非同步模式下)、或者繼續執行至cancelation-point(取消點,下面將描述),總之由不同的cancelation狀態決定。
2 執行緒接收到cancel訊號的預設處理(即pthread_create
()建立執行緒的預設狀態)是繼續執行至取消點再處理(退出),或在非同步方式下直接 退出。乙個執行緒處理cancel請求的退出操作相當於pthread_exit
(pthread_canceled)。當然執行緒可以通過設定為 pthread_cancel_disable來拒絕處理cancel請求,稍後會提及。
<
4> exit
void
eixt
(int status)
status: 通常置 0
不管在任意乙個執行緒中呼叫,退出的都是程序而非執行緒
具體操作
linux執行緒基礎概念及多執行緒程式設計
首先,linux中並不存在真在的執行緒。linux中的執行緒是使用程序來模擬的。在乙個程序需要同時執行多個執行流時,linux並不是開闢多個執行緒來執行,而是通過多個程序來模擬多個執行緒。首先先看一下張圖 此時共有4個執行緒屬於同乙個程序,他們的task struct linux中為pcb 不同,但...
Linux下的多執行緒概念
執行緒是程序內部的執行單位,乙個執行緒即使程序內的乙個執行流。對於執行緒,每個系統的實現可能不一樣,在linux中,執行緒也叫輕量級程序,作業系統沒有把執行緒與程序明顯的區分開,它們的資料結構是一樣的,都是task struct。在程序資源分配時,以程序為單位程序分配 而在排程時,則以執行緒為單位。...
1 1程序和多執行緒的概念及執行緒的優點
程序是作業系統結構的基礎,是一次程式的執行,是程式及其資料在處理機上的順序執行過程,是程式在資料集合上執行的過程,它是系統進行資源分配和排程的獨立單位。程序 process 是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。在早期面向程序設計的...