Linux多執行緒基礎 基礎)

2021-10-04 19:43:14 字數 2161 閱讀 4153

程序: 乙個正在執行的程式,它是資源分配的最小單位

執行緒:是程式執行的最小單位,可以理解為程序的乙個實體。乙個程序可以有多個執行緒。執行緒不能離開程序單獨存在,離開程序談執行緒是沒有意義的。

多執行緒的相比多程序的優勢

建立子程序是拷貝父程序所有的資源進行併發處理,這樣需要更多的資源消耗,對硬體要求更高。而多程序是子程序共享父程序的資源,並不是完全的拷貝複製父程序的資源。

子程序往父程序返回比較難以實現。

子執行緒的建立比子程序的建立要快10到100倍。

執行緒的共享資源:

全域性變數

程序指令

大多數資料

開啟的檔案(描述符)

訊號處理函式和訊號設定

當前工作目錄

使用者id和組id

執行緒的非共享,每個執行緒各自的資源:

執行緒·id

暫存器集合,包括程式計數器和棧指標

棧(用於存放區域性變數和返回位址)

errno

訊號掩碼

優先順序標頭檔案

#include

編譯

加上 -lpthread

pthread_create函式

int

pthread_create

(pthread * tid,

const pthread_attr_t *attr,

void*(

*func)

(void*)

,void

*arg)

;//建立新執行緒,返回0表示建立成功

引數1: 執行緒的id指標, 每個執行緒都有乙個執行緒id(型別為pthread_t),如果新執行緒建立成功其id就通t過tid返回。

引數2:執行緒屬性引數。執行緒有優先順序、初始棧大小等多種屬性,可以通過pthread_attr_t型別變數進行設定。預設是null.

引數3:新執行緒開始的函式名,函式型別必須是void *。

引數4:新執行緒開始函式的引數,型別為void * , 引數可以傳遞單個變數的指標,也可以傳遞結構體等指標。

pthread_join函式

int

pthread_join

(pthread_t * tid,

void

** status)

;//連線乙個執行緒等待它退出,返回0表示成功

第乙個引數是程序號,第二個引數是來自所等待執行緒的返回值,預設為null。

pthread_self函式

pthread_self

(void);

//返回自身的執行緒號

pthread_detach函式

int

pthread_detach

(pthread_t tid)

;//是執行緒狀態為可分離的,執行緒結束後自己釋放

乙個執行緒是可匯合的(joinable)或者可分離的(detached),如果是可匯合的(預設狀態是),當執行緒結束後不會自己釋放,執行緒id和狀態任會保留,只有當其他執行緒使用pthread_join函式連線它時才能釋放。而如果執行緒狀態是可分離的,當執行緒執行結束後它會自己釋放。

pthread_exit函式

void

pthread_exit

(void

* status)

;//主動終止執行緒

在主函式中呼叫pthread_exit函式可以使父程序等其所有子執行緒都結束後再結束退出,避免父程序提前退出。

父程序、主線程和其他執行緒:

進入主函式時,系統會自己建立父程序和主線程,主線程在main函式返回時會使得父程序結束,而如果父程序結束那麼程序中所有的執行緒都會結束(如果有其他子執行緒沒有執行完就會提前終止)。所以要保證主線程等所有其他子程序結束後再退出返回,可以通過sleep()函式或者pthread_exit()函式實現。

Linux多執行緒基礎之執行緒基礎用法

多人砌牆的故事 加快任務完成可以通過加人的方法來實現。同樣,程式中可以通過加程序來實現,但是,多程序存在資源浪費的問題。而執行緒沒有資源浪費的問題。總結 執行緒就是 輕量級 的程序 執行緒與建立它的程序共享 段 資料段 執行緒有自己的棧 建立執行緒 int pthread create pthrea...

linux 多執行緒基礎4

六 執行緒的作用域 函式pthread attr setscope和pthread attr getscope分別用來設定和得到執行緒的作用域,這兩個函式的定義如下 7 名稱 pthread attr setscope pthread attr getscope 功能 獲得 設定執行緒的作用域 標頭...

多執行緒基礎

對於多執行緒程式設計,很多人概念不清,寫 的時候要麼是處處加鎖,影響效能不說,還容易莫名其妙的死鎖,還有人對多執行緒敬而遠之。所以學習多執行緒程式設計最重要的不是學習 api,而是理解什麼才是多執行緒安全的 從例子說起 include include long global1 0 volatile ...