Linux 之 設定執行緒屬性

2021-10-09 09:37:55 字數 2032 閱讀 2624

typedef

struct

pthread_attr_t;

設定執行緒屬性首先要建立乙個 pthread_attr_t 的結構體。然後使用pthread_attr_init函式對其進行初始化,在使用過後用pthread_attr_destroy對其進行銷毀。

初始化執行緒屬性:

int pthread_attr_init(pthread_attr_t *attr); 成功:0;失敗:錯誤號

銷毀執行緒屬性:

int pthread_attr_destroy(pthread_attr_t *attr); 成功:0;失敗:錯誤號

執行緒分離狀態的函式:設定執行緒屬性,分離or非分離

int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);

獲取程屬性: 分離or非分離

int pthread_attr_getdetachstate(pthread_attr_t *attr, int *detachstate);

引數

attr:已初始化的執行緒屬性

detachstate:

pthread_create_detached(分離執行緒)

pthread _create_joinable(非分離執行緒)

這裡要注意的一點是,如果設定乙個執行緒為分離執行緒,而這個執行緒執行又非常快,它很可能在pthread_create函式返回之前就終止了,它終止以後就可能將執行緒號和系統資源移交給其他的執行緒使用,這樣呼叫pthread_create的執行緒就得到了錯誤的執行緒號。要避免這種情況可以採取一定的同步措施,最簡單的方法之一是可以在被建立的執行緒裡呼叫pthread_cond_timedwait函式,讓這個執行緒等待一會兒,留出足夠的時間讓函式pthread_create返回。

#include

#include

#include

#include

#include

#include

#include

#include

void

*fun

(void

* arg)

intmain()

輸出:

main thread exited

thread[140261883602688] is executing

當程序棧位址空間不夠用時,指定新建執行緒使用由malloc分配的空間作為自己的棧空間。通過pthread_attr_setstack和pthread_attr_getstack兩個函式分別設定和獲取執行緒的棧位址。

int pthread_attr_setstack(pthread_attr_t *attr, void *stackaddr, size_t stacksize); 成功:0;失敗:錯誤號

int pthread_attr_getstack(pthread_attr_t *attr, void **stackaddr, size_t *stacksize); 成功:0;失敗:錯誤號

引數: attr:指向乙個執行緒屬性的指標

stackaddr:返回獲取的棧位址

stacksize:返回獲取的棧大小

當系統中有很多執行緒時,可能需要減小每個執行緒棧的預設大小,防止程序的位址空間不夠用,當執行緒呼叫的函式會分配很大的區域性變數或者函式呼叫層次很深時,可能需要增大執行緒棧的預設大小。

函式pthread_attr_getstacksize和 pthread_attr_setstacksize提供設定。

int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize); 成功:0;失敗:錯誤號

int pthread_attr_getstacksize(pthread_attr_t *attr, size_t *stacksize); 成功:0;失敗:錯誤號

引數: attr:指向乙個執行緒屬性的指標

stacksize:返回執行緒的堆疊大小

Linux建立執行緒的屬性設定

如果執行緒呼叫函式 sleep 函式,就是掛起自己,執行緒掛起,此時cpu的時間片就會分配給其他程序。而如果當前執行緒自己輪詢操作,就會一直使用系統分配給自己的時間片。對於乙個系統而言 系統會分配給執行緒時間片,同時系統執行排程程式也會花費時間,稱為排程時間。建立執行緒時的屬性設定 1.執行緒的排程...

linux 執行緒 執行緒屬性

typedef struct pthread attr t 這個結構只是為了說明 實際結構具體系統而定 雖然如此我們並不用擔心因為 屬性值不能直接設定,須使用相關函式進行操作 int pthread attr init pthread attr t attr 初始化執行緒屬性 int pthread...

Linux執行緒屬性

執行緒屬性識別符號 pthread attr t 包含在 pthread.h 標頭檔案中。typedef struct pthread attr t 屬性值不能直接設定,須使用相關函式進行操作,初始化的函式為pthread attr init,這個函式必須在pthread create函式之前呼叫。...