Linux 作業系統之執行緒

2021-08-19 14:34:54 字數 2761 閱讀 3977

程序部落格:

執行緒

在乙個程式裡的乙個執行路線就叫做執行緒(thread)。更準確的定義是:執行緒是乙個程序內部的控制序列。一切程序至少都有乙個執行執行緒。

程序與執行緒:

1.程序是資源競爭的基本單位。

2.執行緒是程式執行的最小單位。

3.執行緒共享程序資料,但也擁有自己的一部分資料。

4.linux下的執行緒,我們稱之為輕量級程序(lwp)。

執行緒的優點:

1.建立乙個新執行緒的代價要比建立乙個程序要小很多。

2.與程序之間的切換相比,執行緒之間的切換需要作業系統做的工作要少很多。

3.執行緒占用的資源要比程序少很多。

4.能充分利用多處理器的可並行數量。

5.在等待慢速i/o操作結束的同時,程式可執行其它的計算任務。

6.i/o密集型應用,為了提高效能,將i/o操作重疊,執行緒可以同時等待不同的i/o操作。

7.計算密集型應用,為了能在多處理器系統上執行,將計算分解到多個執行緒中實現。

執行緒的缺點:

1.效能損失

2.健壯性降低

3.缺乏訪問控制

4.程式設計難度提高

執行緒控制

1.建立執行緒

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

//成功返回0,失敗返回錯誤碼

引數:

thread:返回執行緒id

attr:設定執行緒的屬性,attr為null表示使用預設屬性。

start_routine:是函式位址,執行緒啟動後要執行的函式。

arg:傳給執行緒啟動函式的引數。

檢視執行緒的指令:ps -elf | grep a.out | grep -v grep

#include

#include

#include

#include

#include

void* rout(void* arg)

}int main()

int i;

for( ; ; )

}

2.執行緒終止:

常見的終止執行緒的三種方式:

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

(2)執行緒可呼叫pthread_exit終止自己。

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

注:

pthread_cancel函式,其功能是取消乙個執行中的執行緒。

原型:int pthread_cancel(pthread_t thread)

成功返回0,失敗返回錯誤碼。

3.執行緒等待:

#include

int pthread_join(pthread_t thread,void **value_ptr);

//thread:執行緒id

//value_ptr:它指向乙個指標,後者指向執行緒的返回值

//成功返回0,失敗返回錯誤碼

#include

#include

#include

#include

#include

void* thread1(void* arg)

void* thread2(void* arg)

void* thread3(void* arg)

return null;

}int main()

else

printf("thread return,thread id %x,return code:null\n",tid);

return

0;}

4.執行緒分離:

執行緒的兩種狀態:(1)可結合的 ; (2)分離狀態

(1)預設情況下,新建立的執行緒是joinable(可結合的),執行緒退出後,需要對其進行pthread_join操作,否則無法釋放資源,從而造成資源洩露。

(2)若不關心執行緒的返回值,join是一種負擔,此時,我們可以告訴系統,當執行緒退出時,自動釋放執行緒資源。

int pthread_detach(pthread_t thread);     //分離執行緒號為thread的執行緒

int pthread_detach(pthread_self()); //當前執行緒將自己分離

#include

#include

#include

#include

#include

void* thread_run(void* arg)

int main()

int ret=0;

sleep(1);

if(pthread_join(tid,null)==0)

else

return ret;

}

Linux作業系統 執行緒

執行緒 在乙個程式裡的乙個執行路線就叫做執行緒。更準確的定義是 執行緒是乙個程序內部的控制序列。一切程序至少都有乙個執行執行緒。程序和執行緒 程序是資源競爭的基本單位。執行緒是程式執行的最小單位。執行緒共享程序資料,但也擁有自己的一部分資料 執行緒id,一組暫存器,棧,errno,訊號遮蔽字,排程優...

作業系統 執行緒

靜態鏈結庫是乙個或多個obj檔案的打包,所以有人乾脆把obj檔案生成lib檔案的過程稱為archive,即合併在一起。比如你鏈結乙個靜態庫,如果其中有錯,他會準確的找到是哪個obj有錯,即靜態lib只是殼子。當我們的應用工程在使用靜態庫鏈結時,靜態鏈結庫要參與編譯,在生成執行檔案之前的鏈結過程中,將...

作業系統 執行緒

執行緒是cpu使用的基本單元,它由執行緒id 程式計數器 暫存器集合和棧組成。它與屬於同一程序的其他執行緒共享 段,資料段和其他作業系統資源,如開啟檔案和訊號。乙個傳統重量級的程序只有單個控制線程,如果程序有多個控制線程,那麼它能夠同時做多個任務。多執行緒程式設計的優點 響應度高 如果對乙個互動程式...