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

線程控制函數(shù)

pthread_create

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

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

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

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

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

延伸閱讀

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