Linux下的多執行緒程式設計

2021-09-12 02:44:41 字數 2464 閱讀 4391

執行緒是作業系統能夠進行排程運算的最小單位,它被包含在程序之中,是程序中的實際運作單位。一條執行緒指的是程序中乙個單一順序的控制流,乙個程序可以併發多個執行緒,每條執行緒執行不同的任務。

#include

intpthread_create

(pthread_t *pthread,

const pthread_attr_t *attr,

void*(

*start_routine)

(void*)

,void

*arg)

;

主線程,這是乙個程序的初試執行緒,其入口函式為main函式。

在新執行緒被建立後,便有了乙個在其所在程序內(執行緒依附於程序而存在)唯一的識別符號,由pthread_t表示,成為執行緒id。乙個執行緒可以通過呼叫以下介面獲取其id:

#include

pthread_t pthread_self

(void

);

判斷兩個執行緒id的大小是沒有意義的,但有時可能需要判斷兩個給定的執行緒id是否相等,使用如下介面:

/*

pthread_equal,若指定的執行緒id相同,返回非零值;否則返回0

*/#include int pthread_equal(pthread_t t1, pthread_t t2);

建立乙個新的執行緒,從系統實現的角度看,就是建立了乙個可排程實體;同乙個程序內的執行緒,共享絕大部分程序的資源,只有少部分的資訊是執行緒所特有的,如棧和執行緒特有資料等

假設乙個程序內存在4個執行緒時,記憶體資源的分配情況:

終止某乙個執行緒而不終止整個程序,有三種方法:

從執行緒主函式return,這種方法對主控執行緒不適用,從main函式return相當於呼叫exit;

乙個執行緒可以呼叫pthread_cancel終止同乙個程序中的另乙個執行緒;

執行緒可以呼叫pthread_exit終止自己。

一般情況下,執行緒終止後,其終止狀態一直保留到其他執行緒呼叫pthread_join獲取它的狀態為止。

#include

intpthread_cancel

(pthread_t thread)

;

殺死(取消)執行緒,起作用對應程序中的kill()函式,成功返回0;失敗返回錯誤號。注意:執行緒的取消並不是實時的,而有一定的延時,需要等待執行緒到達某個取消點。當乙個已經被取消的執行緒使用pthread_join**時,得到的返回值為-1.

執行緒終止函式:

#include

void

pthread_exit

(void

*retval)

;

執行緒的連線

乙個執行緒的終止對於另外乙個執行緒而言是一種**非同步的事件,有時我們想等待

某個id的執行緒終止了再去執行某些操作,pthread_join函式提供了這種功能:

#include

intpthread_join

(pthread_t thread,

void

**retval)

;

引數說明:

當執行緒x等待執行緒y時,如果執行緒y仍在執行,則執行緒x會阻塞知道執行緒y終止;如果執行緒y在連線之前已經終止了,那麼執行緒x的連線呼叫會立即返回。

連線線程其實還有另外一層意義,乙個執行緒終止後,如果沒有人對它進行連線,那麼該終止執行緒占用的資源,系統將無法**,而該終止執行緒將成為殭屍執行緒。因此,當我們去連線某個執行緒時,其實也是告訴系統該終止執行緒的資源可以**了

執行緒的分離

有時我們並不在乎某個執行緒是不是已經終止了,只希望執行緒終止後,系統能自動**該終止執行緒所占用的資源,pthread_detach函式為我們提供了這個功能,

#include

intpthread_detach

(pthread_t thread)

;

該函式引數指定希望執行分離操作的執行緒,成功返回0,錯誤返回錯誤碼。

預設情況下,乙個執行緒終止後,是需要在被連線後系統才能**其占有的資源的。如果呼叫上述函式,則執行緒終止後系統將自動**其資源。

linux下多執行緒程式設計

先看執行的結果 1 主函式正在建立執行緒,2執行緒1被建立 3 thread1 i m thread 1th 4執行緒2被建立 5 thread2 i m thread 2nd 6 thread2 number 0 7執行緒3被建立 8主函式正在等待執行緒結束.9 thread1 number 0 ...

Linux下的多執行緒程式設計

如何一次建立多個執行緒 現在對上述的互斥量的實驗程式進行分析 首先在main 函式中建立了兩個執行緒,先執行執行緒1,再執行執行緒2.執行緒1對count加互斥所,此時執行緒2就不能訪問count。只有當沉睡時間過後執行緒1對互斥量解鎖之後,執行緒2才能加鎖修改count的值並訪問,最後解鎖。try...

linux下多多執行緒程式設計

thread example.c c multiple thread programming in linux author falcon e mail tunzhj03 st.lzu.edu.cn include include include include define max 10 pthr...