Linux下執行緒的概念和使用

2021-08-16 22:15:47 字數 1918 閱讀 2960

由於同一程序的多個執行緒共享同一位址空間,所以**段,資料段是共享的,如果定義乙個函式(儲存在**段),各執行緒都可以進行呼叫,如果定義個全域性變數(儲存在資料段),在各執行緒中都可以訪問到,除此之外,各執行緒還共享以下程序資源和環境: 

1.檔案描述符表 

2.每種訊號的處理方式(sig_ign,sig_dfl,使用者自定義) 

3.當前工作目錄 

4.使用者id和組id 

但有些資源是執行緒獨享的: 

1.執行緒id 

2.上下文,包括各種暫存器的值,程式計數器和棧指標 

3.棧空間 

4.errno變數 

5.訊號遮蔽字 

6.排程優先順序 

三. 執行緒的簡單實用

1.建立執行緒

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);

void pthread_exit(void *retval)函式用於程序終止,傳入乙個id,呼叫exit()的話,主程序會終止。終止執行緒由三種方法: 

1).從執行緒函式return。這種方法法對主線程不適用,從main函式return相當於呼叫exit。 

2).乙個執行緒可以呼叫pthread_cancel終止同一程序中的另乙個執行緒。 

3).執行緒可以調pthread_exit終自己。 

retval是void *型別,其它執行緒可以調pthread_join獲得這個指標。 

3.執行緒等待

int pthread_join(pthread_t thread,void **retval);成功返回0,失敗返回錯誤號。 執行緒的等待是以阻塞式等待,執行緒不等待會產生記憶體洩露(類似程序的殭屍程序) 

4.程序取消

在合理範圍內,執行緒可以自我或者被別人取消。取消後返回pthread_canceled(它被定義為(void *)-1),取消呼叫函式pthread_cancel(id); 

5.執行緒分離

在任何乙個時間點上線程是可結合的(joinable)或者是分離的(detached)。乙個可結合的執行緒能夠被其他執行緒收回其資源和殺死。在被其他執行緒**之前,它的儲存器資源(例如棧)是不釋放的。相反乙個分離的執行緒是不能被其他執行緒**或殺死的,它的儲存器資源在它終時時由系統自動釋放。 

預設情況乙個執行緒是可結合的,每乙個可結合的執行緒都應該被顯性的**,既呼叫pthread_join()函式,分離呼叫函式pthread_detach。分離的這個函式是非阻塞的,可以立即返回。但為什麼要分離呢?因為主程序在處理執行緒時,要處理不止乙個,而每乙個都需要被等待,然而join是阻塞式的,這樣的話就只能處理乙個執行緒,所以要加入分離,這樣就可以處理多個執行緒。呼叫pthread_detach()後,這些子程序的狀態會被設定為分離的,該執行緒執行結束會自動釋放所有資源。 

下面為測試**:

#include 

#include

#include

void* thread1()

int main()

//如果直接執行等待**,一般會等待成功,返回1

//如果在等待之前加入取消。等待錯誤,返回-1

// pthread_cancel(tid);

//執行緒可以自我取消也可以被取消,執行緒終止

//呼叫pthread_exit(tid);和取消同樣用法。

int tmp = pthread_join(tid, &ret);

if (tmp == 0)

else

printf(" pid is: %d, tid is: %d\n", getpid(),pthread_self());

sleep(1);

return

0;}

Linux下執行緒

此文講述的執行緒為linux下,其執行緒庫函式是由posix標準定義的,稱為posix thread或者pthread。在linux上線程函式位於libpthread共享庫中,因此在編譯時要加上 lpthread選項。建立執行緒 終止執行緒 等待執行緒 三個函式都為pthread.h中定義,其中要注...

Linux下執行緒的操作

01 7 27 上午 10 39 13 介紹在linux下執行緒的建立和基本的使用。linux下的執行緒是乙個非常複雜的問題,由於我對執行緒的學習不時很好,我在這裡只是簡單的介紹執行緒的建立和基本的使用,關於執行緒的高階使用 如執行緒的屬性,執行緒的互斥,執行緒的同步等等問題 可以參考我後面給出的資...

Linux下執行緒實現

1.執行緒概述 程序是系統中程式執行和資源分配的基本單位。每個程序有自己的資料段 段和堆疊段。執行緒通常叫做輕型的程序。執行緒是在共享記憶體空間中併發執行的多道執行路徑,他們共享乙個程序的資源。因為執行緒和程序比起來很小,所以相對來說,執行緒花費更少的cpu資源。2.執行緒建立和退出 在linux中...