線程是程序中完成一個(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í)間間隔,稱信號是未決的。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26