目錄7.3 設定執行緒屬性
參考乙個程序至少需要乙個執行緒作為它的指令執行體,程序管理著資源(比如cpu、記憶體、檔案等等), 而將執行緒分配到某個cpu上執行
新的執行執行緒將擁有自己的棧,但與它的建立者共享全域性變數、檔案描述符、訊號處理函式和當前目錄狀態
特點:使用pthread_create建立執行緒
使用int pthread_attr_destroy(pthread_attr_t *attr);函式來銷毀乙個執行緒屬性物件
使用pthread_attr_init()函式可以初始化執行緒物件的屬性
使用pthread_join()等待執行緒結束
使用pthread_detach()來設定執行緒為分離狀態
7.2.1 pthread_create()
執行緒屬性不能直接設定,只能通過函式操作
執行緒屬性包括:作用域(scope)、棧大小(stacksize)、棧位址(stackaddress)、優先順序(priority)、 分離的狀態(detachedstate)、排程策略和引數(scheduling policy and parameters)
執行緒的預設屬性:非繫結、非分離、1m的堆疊大小、與父程序同樣級別的優先順序
api:
api說明
pthread_attr_init()
初始化乙個執行緒物件的屬性
pthread_attr_destroy()
銷毀乙個執行緒屬性物件
pthread_attr_getaffinity_np()
獲取執行緒間的cpu親緣性
pthread_attr_setaffinity_np()
設定執行緒的cpu親緣性
pthread_attr_getdetachstate()
獲取執行緒分離狀態屬性
pthread_attr_setdetachstate()
修改執行緒分離狀態屬性
pthread_attr_getguardsize()
獲取執行緒的棧保護區大小
pthread_attr_setguardsize()
設定執行緒的棧保護區大小
pthread_attr_getscope()
獲取執行緒的作用域
pthread_attr_setscope()
設定執行緒的作用域
pthread_attr_getstack()
獲取執行緒的堆疊資訊(棧位址和棧大小)
pthread_attr_setstack()
設定執行緒堆疊區
pthread_attr_getstacksize()
獲取執行緒堆疊大小
pthread_attr_setstacksize()
設定執行緒堆疊大小
pthread_attr_getschedpolicy()
獲取執行緒的排程策略
pthread_attr_setschedpolicy()
設定執行緒的排程策略
pthread_attr_setschedparam()
獲取執行緒的排程優先順序
pthread_attr_getschedparam()
設定執行緒的排程優先順序
pthread_attr_getinheritsched()
獲取執行緒是否繼承排程屬性
pthread_attr_getinheritsched()
設定執行緒是否繼承排程屬性
7.3.1 pthread_attr_init()
7.3.2 銷毀乙個執行緒屬性物件
7.3.3 執行緒的分離狀態
執行緒的分離狀態決定乙個執行緒以什麼樣的方式來終止自己
預設狀態下是非分離狀態
函式:rval_ptr設定為null,則忽略返回狀態
int pthread_detach(pthread_t tid);
在非分離狀態下:
在分離狀態下:
如果在建立執行緒時就知道不需要了解執行緒的終止狀態,則可以pthread_attr_t結構中的detachstate執行緒屬性,讓執行緒以分離狀態啟動
獲取某個執行緒的分離狀態
注意:
7.3.4 執行緒的排程策略
policy:可選值為執行緒的三種排程策略
int pthread_attr_setinheritsched(pthread_attr_t *attr, int inheritsched);
int pthread_attr_getinheritsched(const pthread_attr_t *attr, int *inheritsched);
int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);
int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy);
7.3.5 執行緒優先順序
執行緒優先順序的設定(靜態優先順序)(sched_fifo和sched_rr)
int sched_get_priority_max(int policy);
int sched_get_priority_min(int policy);
int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param);
int pthread_attr_getschedparam(const pthread_attr_t *attr, struct sched_param *param);
執行緒優先順序特點
7.3.6 執行緒棧
7.4 退出執行緒
* 野火
linux系統程式設計 執行緒
include int pthread create pthread t thread,const pthread attr t attr,void start routine void void arg include include include include include include...
《Linux系統程式設計 執行緒池》
在傳統伺服器結構中,常是有乙個總的監聽執行緒監聽有沒有新的使用者連線伺服器,每當有乙個新的使用者進入,伺服器就開啟乙個新的執行緒使用者處理這 個使用者的資料報。這個執行緒只服務於這個使用者,當使用者與伺服器端關閉連線以後,伺服器端銷毀這個執行緒。然而頻繁地開闢與銷毀執行緒極大地占用了系統的資源,而且...
Linux系統程式設計 執行緒基礎
執行緒的概念 執行緒是程序內部的一條執行序列,或者執行流。每個程序至少有一條執行緒,稱之為主線程。從 的角度看,就是main函式的函式體。在主線程中可以通過執行緒庫建立其他函式執行緒。在同乙個程序中的執行緒都是併發執行的,並且執行緒的執行順序由系統決定。主線程和函式執行緒沒有本質的區別,只是主線程是...