初學Linux執行緒建立

2021-10-07 08:50:11 字數 3932 閱讀 5365

程序程序是資源(cpu、記憶體等)分配的基本單位,它是程式執行時的乙個例項。

執行緒執行緒是一條執行路徑,是程式執行時的最小單位,它是程序的乙個執行流,是cpu排程和分派的基本單位,乙個程序可以由很多個執行緒組成,執行緒間共享程序的所有資源,每個執行緒有自己的堆疊和區域性變數。

執行緒是一條可以執行的路徑。多執行緒就是同時有多條執行路徑在同時(並行)執行。

程序與執行緒的關係

乙個程式就是乙個程序,而乙個程式中的多個任務則被稱為執行緒。程序是表示資源分配的基本單位,又是排程執行的基本單位

乙個執行緒只能屬於乙個程序,而乙個程序可以有多個執行緒,但至少有乙個執行緒。執行緒是作業系統可識別的最小執行和排程單位。

執行緒正常終止的方法:

1、return從執行緒函式返回。

2、通過呼叫函式pthread_exit使執行緒退出

3. 執行緒可以被同一程序中的其他執行緒取消

pthread_t tid執行緒標示符 ,用於宣告執行緒id。

pthread_attr_t

執行緒屬性

1)執行緒具有屬性,用pthread_attr_t表示,在對該結構進行處理之前必須進行初始化,在使用後需要對其去除初始化。

2)呼叫pthread_attr_init之後,pthread_t 結構所包含的內容就是作業系統實現支援的執行緒所有屬性的預設值。

3)如果要去除對pthread_attr_t結構的初始化,可以調pthread_attr_destroy函式。如果pthread_attr_init實現時為屬性物件分配了動態記憶體空間,pthread_attr_destroy還會用無效的值初始化屬性物件,因此如果經pthread_attr_destroy去除初始化之pthread_attr_t結構被pthread_create函式呼叫,將會導致其返回錯誤。

typedef

struct

pthread_attr_t;

//執行緒的屬性

1.pthread_create(thread,attr,start_routine,arg)描述:建立乙個新執行緒並使之執行起來。該函式可以在程式的任何地方呼叫。

引數:thread:指向執行緒識別符號的指標。

attr:用來設定執行緒屬性,上面也可以用null,表示使用預設的屬性。

start_routine:執行緒將會執行一次的c函式, 是執行緒執行函式的起始位址。

arg: 執行函式的引數,null表示無引數。

示例中的函式: pthread_create(&tid,&attr,runner,ar**[1]);

2.atoi(const char*str)描述:把引數 str 所指向的字串轉換為乙個整數(型別為 int 型)。

庫函式:#include

例項:將字串轉換成乙個整數並返d回結果。引數str 以數字開頭,當函式從str 中讀到非數dao字字元則結束轉換並將結果返回。例如,

int i = atoi( 「512.0」 );

i 的值為 512.

3. pthread_attr_init(pthread_attr_t*attr)描述:初始化乙個執行緒屬性物件

庫函式:#include

引數:指向乙個執行緒屬性的指標

返回值:0 - 成功,非0 - 失敗

pthread_attr_init (attr);

4. pthread_attr_destroy(pthread_attr_t*attr)描述:銷毀乙個執行緒屬性物件

庫函式:#include

引數:指向乙個執行緒屬性的指標

返回值:0 - 成功,非0 - 失敗

pthread_attr_destroy(attr);

5.pthread_join (threadid,status)描述 :用來等待乙個執行緒的結束,即函式的呼叫者在等待子執行緒退出後才繼續執行!

引數 :

thread: 執行緒識別符號,即執行緒id,標識唯一執行緒。

retval: 使用者定義的指標,用來儲存被等待執行緒的返回值。

返回值 : 0代表成功。 失敗,返回的則是錯誤號。

pthread_join(tid,null);

6.pthread_exit (void*retval )描述:使用函式pthread_exit退出執行緒,這是執行緒的主動行為;

原型:void pthread_exit(void *retval)

庫函式:#include

引數:value_ptr是函式的返回**

pthread_exit(0);

使用pthread機制設計執行緒建立實驗。

#include

#include

int sum;

/* this data is shared by the thread(s) */

void

*runner

(void

*param)

;/* threads call this function */

intmain

(int argc,

char

*ar**)

if(atoi

(ar**[1]

)<0)

/* get the default attributes */

pthread_attr_init

(&attr)

;/* create the thread */

pthread_create

(&tid,

&attr,runner,ar**[1]

);/* wait for the thread to exit */

pthread_join

(tid,

null);

printf

("sum = %d\n"

,sum);}

/* the thread will begin control in this function */

void

*runner

(void

*param)

結果如果注釋掉 **pthread_join(tid,null);**錯誤結果如下:

也就是說:子執行緒還沒有執行完畢,main函式已經退出,那麼子執行緒也就退出了!

主函式int main(int argc,char*ar**)引數:int argc為命令列引數個數,char *ar**為命令列引數陣列。這種寫法,主要用在需要從命令列獲取引數的功能。

argc – 即修飾命令列引數的個數(包含ar**[0])

ar**[ ] – 命令列輸入的字串

ar**[0] --獲取可執行程式的路徑

ar**[i] – 自己在命令列輸入的字串

函式引數詳細理解請參考:

linux建立執行緒 建立Linux核心執行緒

執行緒 thread 是作業系統能夠進行運算排程的最小單位。它被包含在程序之中,是程序中的實際運作單位。乙個執行緒指的是程序中乙個單一順序的控制流,乙個程序中可以併發多個執行緒,每個執行緒並行執行不同的任務。很多時候會需要在後台執行一些任務,比如做乙個需要實時監控某個模組狀態的debug功能,這種任...

Linux建立子執行緒

建立乙個子執行緒函式 utili.h include include include include using namespace std pthread.h include utili.h void thread fun void arg printf this is child id d n ...

Linux 核心執行緒建立

在linux核心中,建立執行緒函式為 kthread create on node 需要注意的是核心建立乙個核心執行緒是個非同步過程。函式 kthread create on node對外提供兩個函式一,kthread create worker二,kthread create on node當然我...