線程是程序中完成一個獨立任務的完整執(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)境和信號屏蔽字,但是該線程的未決信號集被清除。那什么是未決信號呢,信號產生到信號被處理這段時間間隔,稱信號是未決的。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應用分析 2017-07-26
- 集合結合數據結構來看看(二) 2017-07-26
![學習是年輕人改變自己的最好方式-Java培訓,做最負責任的教育,學習改變命運,軟件學習,再就業(yè),大學生如何就業(yè),幫大學生找到好工作,lphotoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網站設計培訓,網站建設培訓](http://szjygames.cn/attached/image/templet/e87d53eb-cf7a-4689-887a-1cd260f416a5.jpg)