執行緒屬性pthread attr t簡介

2021-08-02 14:02:40 字數 4844 閱讀 5386

posix執行緒中的執行緒屬性pthread_attr_t主要包括scope屬性、detach屬性、堆疊位址、堆疊大小、優先順序。在pthread_create中,把第二個引數設定為null的話,將採用預設的屬性配置。

pthread_attr_t的主要屬性的意義如下:

__detachstate

,表示新執行緒是否與程序中其他執行緒脫離同步,

如果設定為

pthread_create_detached

則新執行緒不能用pthread_join()來同步,且在退出時自行釋放所占用的資源。預設為

pthread_create_joinable

pthread_detach()

來設定,而一旦設定為pthread_create_detach狀態(不論是建立時設定還是執行時設定)則不能再恢復到pthread_create_joinable狀態。

__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

功能:        

設定執行緒

detachstate

屬性。該表示新執行緒是否與程序中其他執行緒脫離同步,如果設定為

pthread_create_detached

則新執行緒不能用pthread_join()來同步,且在退出時自行釋放所占用的資源。預設為

pthread_create_joinable

標頭檔案:      

函式原型:   

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

屬性,即呼叫的

優先順序。

標頭檔案:    

函式原型:   i

nt 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

);

intmain

(int

argc

,char

**argv

) ;

intret =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

) ret

=pthread_create

(&pt_2

,null

,pthread_func_2

,null

); if(

ret !=0

) pthread_join

(pt_2

,null

);

return0;

} static

void

pthread_func_1

(void)

}return

; }

static

void

pthread_func_2

(void)

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 表示執行緒被排程的策...