Linux 下多執行緒的概念及其具體操作

2021-10-05 12:40:39 字數 2953 閱讀 7287

目的

多了實現多工處理方式。

多工處理

多建立幾個程序,能夠序列化的完成多個任務;以前我們說乙個程序就是乙個 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 是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。在早期面向程序設計的...