程序部落格:
執行緒
在乙個程式裡的乙個執行路線就叫做執行緒(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 程式計數器 暫存器集合和棧組成。它與屬於同一程序的其他執行緒共享 段,資料段和其他作業系統資源,如開啟檔案和訊號。乙個傳統重量級的程序只有單個控制線程,如果程序有多個控制線程,那麼它能夠同時做多個任務。多執行緒程式設計的優點 響應度高 如果對乙個互動程式...