linux 系統程式設計 5 執行緒

2022-06-05 05:57:06 字數 3183 閱讀 6970

目錄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函式的函式體。在主線程中可以通過執行緒庫建立其他函式執行緒。在同乙個程序中的執行緒都是併發執行的,並且執行緒的執行順序由系統決定。主線程和函式執行緒沒有本質的區別,只是主線程是...