執行緒屬性結構如下:
typedef struct
pthread_attr_t;
屬性的預設值如下:屬性值
結果scope
pthread_scope_process
新執行緒與程序中的其他執行緒發生競爭。
detachstate
pthread_create_joinable
執行緒退出後,保留完成狀態和執行緒 id。
stackaddr
null
新執行緒具有系統分配的棧位址。
stacksize
0 新執行緒具有系統定義的棧大小。
priority
0 新執行緒的優先順序為 0。
inheritsched
pthread_explicit_sched
新執行緒不繼承父執行緒排程優先順序。
schedpolicy
sched_other
新執行緒對同步物件爭用使用 solaris 定義的固定優先順序。執行緒將一直執行,直到被搶占或者直到執行緒阻塞或停止為止
。 下面重點介紹對執行緒屬性進行設定的一系列系統函式。
1、初始化乙個執行緒物件的屬性
int pthread_attr_init(pthread_attr_t *attr);
返回值:若是成功返回0,否則返回錯誤的編號
形 參:
attr 指向乙個執行緒屬性的指標
說 明:posix執行緒中的執行緒屬性pthread_attr_t主要包括scope屬性、detach屬性、堆疊位址、堆疊大小、優先順序。
pthread_attr_init實現時為屬性物件分配了動態記憶體空間。
標頭檔案:#include
[color=space:pre-wrap]
2、銷毀乙個執行緒屬性物件
int pthread_attr_destroy(pthread_attr_t *attr);
返回值:若是成功返回0,否則返回錯誤的編號
形 參:
attr 指向乙個執行緒屬性的指標
說 明:經pthread_attr_destroy去除初始化之後的pthread_attr_t結構被pthread_create函式呼叫,將會導致其返回錯誤。
標頭檔案:#include ]]
3、獲取執行緒堆疊大小
int pthread_attr_getstacksize(pthread_attr_t *attr, size_t *stacksize);
返回值:若是成功返回0,否則返回錯誤的編號
形 參:
attr 指向乙個執行緒屬性的指標
stacksize 返回執行緒的堆疊大小
說 明:獲取執行緒堆疊大小
標頭檔案:#include
[color=space:pre-wrap]
4、設定執行緒堆疊大小
[color=space:pre-wrap]
int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
返回值:若是成功返回0,否則返回錯誤的編號
形 參:
attr 指向乙個執行緒屬性的指標
guardsize 執行緒的棧保護區大小:應該是頁大小的整數倍
說 明:設定執行緒堆疊大小:
標頭檔案:#include
[color=space:pre-wrap]
5、獲取執行緒堆疊位址
int pthread_attr_getstackaddr(pthread_attr_t *attr, void **stackaddr);
返回值:若是成功返回0,否則返回錯誤的編號
形 參:
attr 指向乙個執行緒屬性的指標
stackaddr 返回獲取的棧位址
說 明:函式已過時,一般用pthread_attr_getstack來代替
標頭檔案:#include
[color=space:pre-wrap]
6、設定執行緒堆疊位址
int pthread_attr_setstackaddr(pthread_attr_t *attr, void *stackaddr);
返回值:若是成功返回0,否則返回錯誤的編號
形 參:
attr 指向乙個執行緒屬性的指標
stackaddr 設定執行緒堆疊位址
說 明:函式已過時,一般用pthread_attr_setstack來代替
標頭檔案:#include
[color=space:pre-wrap]
7、獲取執行緒分離狀態屬性
int pthread_attr_getdetachstate(pthread_attr_t *attr, int *detachstate);
返回值:若是成功返回0,否則返回錯誤的編號
形 參:
attr 指向乙個執行緒屬性的指標
detachstate 儲存返回的分離狀態屬性
說 明:獲取執行緒分離狀態屬性
標頭檔案:#include
[color=space:pre-wrap]
8、修改執行緒分離狀態屬性
int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);
返回值:若是成功返回0,否則返回錯誤的編號
形 參:
attr 指向乙個執行緒屬性的指標
detachstat 有兩個取值
pthread_create_detached(分離)
pthread_create_joinable(非分離)
說 明:posix執行緒中的執行緒屬性pthread_attr_t主要包括scope屬性、detach屬性、堆疊位址、堆疊大小、優先順序。
標頭檔案:#include
[color=space:pre-wrap]
9、獲取執行緒的作用域
int pthread_attr_getscope(pthread_attr_t *attr, int *scope);
返回值:若是成功返回0,否則返回錯誤的編號
形 參:
attr 指向乙個執行緒屬性的指標
scope 返回執行緒的作用域
說 明:指定了作用域也就指定了執行緒與誰競爭資源
標頭檔案:#include
[color=space:pre-wrap]
10、設定執行緒的作用域
int pthread_attr_setscope(pthread_attr_t *attr, int scope);
返回值:若是成功返回0,否則返回錯誤的編號
形 參:
attr 指向乙個執行緒屬性的指標
guardsize 執行緒的作用域,可以取如下值
pthread_scope_system 與系統中所有程序中線程競爭
pthread_scope_process 與當前程序中的其他執行緒競爭
說 明:指定了作用域也就指定了執行緒與誰競爭資源
標頭檔案:#include
[color=space:pre-wrap]
11、獲取執行緒是否繼承排程屬性
int pthread_attr_getinheritsched(pthread_attr_t *attr, int *inheritsched);
返回值:若是成功返回0,否則返回錯誤的編號
形 參:
attr 指向乙個執行緒屬性的指標
inheritsched 返回繼承排程屬性的設定
說 明:獲取執行緒是否繼承排程屬性
標頭檔案:#include
[color=space:pre-wrap]
12、設定執行緒是否繼承排程屬性
int pthread_attr_getinheritsched(pthread_attr_t *attr, int *inheritsched);
返回值:若是成功返回0,否則返回錯誤的編號
形 參:
attr 指向乙個執行緒屬性的指標
guardsize 設定執行緒是否繼承排程屬性
pthread_inherit_sched:排程屬性將繼承於正建立的執行緒
attr中的設定將被忽略
pthread_explicit_sched 排程屬性將被設定為attr中指定的屬性值
說 明: 盛世遊戲:
標頭檔案:#include
[color=space:pre-wrap]
13、獲取執行緒的排程策略
int pthread_attr_getschedpolicy(pthread_attr_t *attr, int *policy);
返回值:若是成功返回0,否則返回錯誤的編號
形 參:
attr 指向乙個執行緒屬性的指標
policy 返回執行緒的排程策略
說 明:獲取執行緒的排程策略
標頭檔案:#include
[color=space:pre-wrap]
14、設定執行緒的排程策略
int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);
返回值:若是成功返回0,否則返回錯誤的編號
形 參:
attr 指向乙個執行緒屬性的指標
policy 執行緒的排程策略,有如下三種:
sched_fifo 先入先出策略
linux C 多執行緒程式設計
1.solaris vs.linux posix 庫 solaris 庫 lib 執行緒 linux posix 庫 libp 執行緒 操作sema destroy sem destroy 銷毀訊號狀態。sema init sem init 初始化訊號。sema post sem post 增加訊號...
linux C 多執行緒程式設計
1.solaris vs.linux posix 庫 solaris 庫 lib 執行緒 linux posix 庫 libp 執行緒 操作sema destroy sem destroy 銷毀訊號狀態。sema init sem init 初始化訊號。sema post sem post 增加訊號...
Linux c程式設計 執行緒屬性
前面介紹了pthread create函式,並且當時的例子中,傳入的引數都是空指標,而不是指向pthread attr t結構的指標。可以使用pthread attr t結構修改執行緒預設屬性,並把這些屬性與建立的執行緒聯絡起來。可以使用pthread attr init函式初始化pthread a...