Linux作業系統 執行緒

2021-08-26 17:38:23 字數 2147 閱讀 4400

執行緒:在乙個程式裡的乙個執行路線就叫做執行緒。更準確的定義是:執行緒是乙個程序內部的控制序列。

一切程序至少都有乙個執行執行緒。

程序和執行緒:

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

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

執行緒共享程序資料,但也擁有自己的一部分資料:執行緒id,一組暫存器,棧,errno,訊號遮蔽字,排程優先順序。

程序的多個執行緒共享

同一位址空間,因此text segment,data segment都是共享的,如果定義乙個函式,在各執行緒中都可以訪問到,各執行緒中都以呼叫,如果定義乙個全域性變數,在各執行緒中都可以訪問到,初次之外,各執行緒還共享以下程序資源和環境。

檔案描述符表

每種訊號的處理方式(sig_ign.sig——dfl或者自定義的訊號處理函式)

當前工作目錄使用者id和組id

執行緒的優點:建立乙個新執行緒的代價要比建立乙個新程序小的多,與程序之間的切換相比,執行緒之間的切換需要作業系統做的工作要少很多。

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

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

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

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

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

執行緒的缺點

效能損失:

乙個很少被外部事件阻塞的計算密集型執行緒往往無法與共享它的執行緒共享同乙個處理器。如果計算密集型執行緒的數量比可用的處理器多,那麼可能會有較大的效能損失,這裡的效能損失指的是增加了額外的同步和排程開銷,而可用的資源不變。

健壯性降低:

編寫多執行緒需要更全面更深入的考慮,在乙個多執行緒程式裡,因時間分配上的細微偏差或者因共享了不該共享的變數而造成不良影響的可能性是很大的,換句話說執行緒之間是缺乏保護的。

缺乏訪問控制:程序是訪問控制的基本粒度在乙個執行緒中呼叫某些os函式會對真個程序造成影響。

程式設計難度提高:

編寫與除錯乙個多執行緒程式比單執行緒程式困難得多。

int pthread_create(pthreate_t thread,const pthread_attr_t *attr,void (start_rutine)(void),void *arg)

thread:返回執行緒id

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

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

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

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

#include

int sem_init(sem_t *sem,int pshared,unsigned int value);

pshared:0 表示執行緒間共享,非0表示程序間共享。

value:訊號量初始值

int sem_destroy(sem_t *sem)

銷毀訊號量

等待訊號量

int sem_wait(sem_t *sem);

發布訊號量

int sem_post(sem_t *sem);

讀寫鎖:在編寫多執行緒的時候,有一種情況是十分常見的,那就是,有些公共資料修改的機會比較少,相比較改寫,它們讀的機會反而高的多。通常而言,在讀的過程中,往往伴隨著查詢操作,中間耗時很長,給這種**段加鎖,會極大的降低我們程式的效率。那麼有沒有一種方法,可以專門處理這種多讀少寫的情況,那就是讀寫鎖。

注意:寫獨佔,讀共享,寫鎖優先順序高。

讀寫鎖介面:

int pthread_rwlock_init(pthread_rwlock_t* restrict rwlock,const pthread_rwlock_t *restrict attr);

銷毀:int pthread_rwlock_destory(pthread_rwlock_t *rwlock);

加鎖和解鎖

int pthread_rwlock_rdlock(pthread_rwlock_t*rwlock);

int pthread_rwlock_wrlock(pthread_rwlock_t*rwlock);

int pthread_rwlock_unlock(pthread_rwlock_t &rwlock);

Linux 作業系統之執行緒

程序部落格 執行緒 在乙個程式裡的乙個執行路線就叫做執行緒 thread 更準確的定義是 執行緒是乙個程序內部的控制序列。一切程序至少都有乙個執行執行緒。程序與執行緒 1.程序是資源競爭的基本單位。2.執行緒是程式執行的最小單位。3.執行緒共享程序資料,但也擁有自己的一部分資料。4.linux下的執...

作業系統 執行緒

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

作業系統 執行緒

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