posix執行緒中的執行緒屬性pthread_attr_t主要包括scope屬性、detach屬性、堆疊位址、堆疊大小、優先順序。在pthread_create中,把第二個引數設定為null的話,將採用預設的屬性配置。
pthread_attr_t的主要屬性的意義如下:
__schedpolicy,表示新執行緒的排程策略,主要包括sched_other(正常、非實時)、sched_rr(實時、輪轉法)和sched_fifo(實時、先入先出)三種,預設為sched_other,後兩種排程策略僅對超級使用者有效。執行時可以用過pthread_setschedparam()來改變。
__schedparam,乙個struct sched_param結構,目前僅有乙個sched_priority整型變數表示執行緒的執行優先順序。這個引數僅當排程策略為實時(即sched_rr或sched_fifo)時才有效,並可以在執行時通過pthread_setschedparam()函式來改變,預設為0。
__inheritsched,有兩種值可供選擇:pthread_explicit_sched和pthread_inherit_sched,前者表示新執行緒使用顯式指定排程策略和排程引數(即attr中的值),而後者表示繼承呼叫者執行緒的值。預設為pthread_explicit_sched。
__scope,表示執行緒間競爭cpu的範圍,也就是說執行緒優先順序的有效範圍。posix的標準中定義了兩個值:pthread_scope_system和pthread_scope_process,前者表示與系統中所有執行緒一起競爭cpu時間,後者表示僅與同程序中的執行緒競爭cpu。目前linuxthreads僅實現了pthread_scope_system一值。
為了設定這些屬性,posix定義了一系列屬性設定函式,包括pthread_attr_init()、pthread_attr_destroy()和與各個屬性相關的pthread_attr_get***/pthread_attr_set***函式。
在設定執行緒屬性 pthread_attr_t 之前,通常先呼叫pthread_attr_init來初始化,之後來呼叫相應的屬性設定函式。
主要的函式如下:
1、pthread_attr_init
功能: 對執行緒屬性變數的初始化。
標頭檔案:
函式原型: int pthread_attr_init (pthread_attr_t* attr);
函式傳入值:attr:執行緒屬性。
函式返回值:成功: 0
失敗: -1
2、pthread_attr_setscope
功能: 設定執行緒 __scope 屬性。scope屬性表示執行緒間競爭cpu的範圍,也就是說執行緒優先順序的有效範圍。posix的標準中定義了兩個值:pthread_scope_system和pthread_scope_process,前者表示與系統中所有執行緒一起競爭cpu時間,後者表示僅與同程序中的執行緒競爭cpu。預設為pthread_scope_process。目前linuxthreads僅實現了pthread_scope_system一值。
標頭檔案:
函式原型: int pthread_attr_setscope (pthread_attr_t* attr, int scope);
函式傳入值:attr: 執行緒屬性。
scope:pthread_scope_system,表示與系統中所有執行緒一起競爭cpu時間,
pthread_scope_process,表示僅與同程序中的執行緒競爭cpu
函式返回值得:同1。
3、pthread_attr_setdetachstate
標頭檔案:
函式原型: int pthread_attr_setdetachstate (pthread_attr_t* attr, int detachstate);
函式傳入值:attr:執行緒屬性。
detachstate:pthread_create_detached,不能用pthread_join()來同步,且在退出時自行釋放所占用的資源
pthread_create_joinable,能用pthread_join()來同步
函式返回值得:同1。
4、pthread_attr_setschedparam
功能: 設定執行緒schedparam屬性,即呼叫的優先順序。
標頭檔案:
函式原型: int pthread_attr_setschedparam (pthread_attr_t* attr, struct sched_param* param);
函式傳入值:attr:執行緒屬性。
param:執行緒優先順序。乙個struct sched_param結構,目前僅有乙個sched_priority整型變數表示執行緒的執行優先順序。這個引數僅當排程策略為實時(即sched_rr或sched_fifo)時才有效,並可以在執行時通過pthread_setschedparam()函式來改變,預設為0
函式返回值:同1。
5、pthread_attr_getschedparam
功能: 得到執行緒優先順序。
標頭檔案:
函式原型: int pthread_attr_getschedparam (pthread_attr_t* attr, struct sched_param* param);
函式傳入值:attr:執行緒屬性;
param:執行緒優先順序;
函式返回值:同1。
示例1:
#include#include
#include
#include
static void pthread_func_1 (void);
static void pthread_func_2 (void);
int main (int argc, char** argv)
pthread_t pt_1 = 0;
pthread_t pt_2 = 0;
pthread_attr_t atrr = ;
int ret = 0;
/*初始化屬性執行緒屬性*/
pthread_attr_init (&attr);
pthread_attr_setscope (&attr, pthread_scope_system);
pthread_attr_setdetachstate (&attr, pthread_create_detached);
ret = pthread_create (&pt_1, &attr, pthread_func_1, null);
if (ret != 0)
perror ("pthread_1_create");
ret = pthread_create (&pt_2, null, pthread_func_2, null);
if (ret != 0)
perror ("pthread_2_create");
pthread_join (pt_2, null);
return 0;
static void pthread_func_1 (void)
int i = 0;
for (; i < 6; i++)
printf ("this is pthread_1.\n");
if (i == 2)
pthread_exit (0);
return;
static void pthread_func_2 (void)
int i = 0;
for (; i < 3; i ++)
printf ("this is pthread_2.\n");
return;
從上面事例中,可以得到這麼乙個結果,就是執行緒一的執行緒函式一結束就自動釋放資源,執行緒二就得等到pthread_join來釋放系統資源。
linux 執行緒 執行緒屬性
typedef struct pthread attr t 這個結構只是為了說明 實際結構具體系統而定 雖然如此我們並不用擔心因為 屬性值不能直接設定,須使用相關函式進行操作 int pthread attr init pthread attr t attr 初始化執行緒屬性 int pthread...
執行緒屬性總結 執行緒的api屬性
執行緒屬性結構如下 typedef struct pthread attr t 屬性值不能直接設定,須使用相關函式進行操作,初始化的函式為pthread attr init,這個函式必須在pthread create函式之前呼叫。之後須用pthread attr destroy函式來釋放資源。執行緒...
linux執行緒 2 執行緒屬性
執行緒屬性由資料結構pthread attr t結構表示,其定義如下所示 typedef struct pthread attr t 這個結構體在使用過程中由pthread attr init和pthread attr destory負責資料的初始化和銷毀 schepolicy 表示執行緒被排程的策...