線程是程序中完成一個獨立任務的完整執(zhí)行序列,即一個可調度的實體;進程相當于運行中程序的一種抽象。根據運行環(huán)境的調度者的身份,線程可分為內核線程和用戶線程。內核線程,在有的系統(tǒng)上稱為LWP(Light Weight Process,輕量級線程),運行在內核空間,由內核調度;用戶線程運行在用戶空間,由線程庫來調度。當進程的一個內核線程獲得CPU的使用權時,它就加載并運行一個用戶線程。可見,內核線程相當于用戶線程運行的‘容器’,一個進程可以擁有M個內核線程和N個用戶線程,其中M<=N,并且一個系統(tǒng)的所有進程中,M和N的比值是固定的。

線程控制函數

pthread_create

#include <pthread.h> int pthread_create(pthread_t * tidp, const pthread_attr_t *attr, void *(*start_rtn)(void *), void *arg); // 返回:成功返回0,出錯返回錯誤編號

當pthread_create函數返回成功時,有tidp指向的內存被設置為新創(chuàng)建線程的線程ID,其類型pthread_t定義為:

#include <bits/pthreadtypes.h> typedef unsigned long int pthread_t;

attr參數用于設置各種不同的線程屬性,為NULL時表示默認線程屬性。新創(chuàng)建的線程從start_rtn函數的地址開始運行,該函數只有一個無類型指針的參數arg,如果需要向start_rtn函數傳入的參數不止一個,可以把參數放入到一個結構中,然后把這個結構的地址作為arg的參數傳入。

線程創(chuàng)建時并不能保證哪個線程會先運行:是新創(chuàng)建的線程還是調用線程。新創(chuàng)建的線程可以訪問調用進程的地址空間,并且繼承調用線程的浮點環(huán)境和信號屏蔽字,但是該線程的未決信號集被清除。那什么是未決信號呢,信號產生到信號被處理這段時間間隔,稱信號是未決的。

延伸閱讀

學習是年輕人改變自己的最好方式-Java培訓,做最負責任的教育,學習改變命運,軟件學習,再就業(yè),大學生如何就業(yè),幫大學生找到好工作,lphotoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網站設計培訓,網站建設培訓學習是年輕人改變自己的最好方式