Linux C程式設計 執行緒操作執行緒屬性解析

2021-06-15 10:34:55 字數 4790 閱讀 4338

執行緒屬性結構如下:

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...