Posix多執行緒程式設計學習筆記(二) 執行緒屬性(1)

2021-04-25 15:54:40 字數 3543 閱讀 3655

一.執行緒屬性

執行緒具有屬性,用

pthread_attr_t

表示,在對該結構進行處理之前必須進行初始化,在使用後需要對其去除初始化。我們用

pthread_attr_init

函式對其初始化,用

pthread_attr_destroy

對其去除初始化。1.

名稱::pthread_attr_init/pthread_attr_destroy

功能:對執行緒屬性初始化

/去除初始化

標頭檔案:

#include

函式原形:

int pthread_attr_init(pthread_attr_t *attr);

int pthread_attr_destroy(pthread_attr_t *attr);

引數:attr  

執行緒屬性變數

返回值:

若成功返回

0,若失敗返回-1。

呼叫pthread_attr_init

之後,pthread_t

結構所包含的內容就是作業系統實現支援的執行緒所有屬性的預設值。

如果要去除對

pthread_attr_t

結構的初始化,可以呼叫

pthread_attr_destroy

函式。如果

pthread_attr_init

實現時為屬性物件分配了動態記憶體空間,

pthread_attr_destroy

還會用無效的值初始化屬性物件,因此如果經

pthread_attr_destroy

去除初始化之後的

pthread_attr_t

結構被pthread_create

函式呼叫,將會導致其返回錯誤。

執行緒屬性結構如下:

typedef struct

pthread_attr_t;

每個個屬性都對應一些函式對其檢視或修改。下面我們分別介紹。

二、執行緒的分離狀態

執行緒的分離狀態決定乙個執行緒以什麼樣的方式來終止自己。在預設情況下執行緒是非分離狀態的,這種情況下,原有的執行緒等待建立的執行緒結束。只有當

pthread_join

()函式返回時,建立的執行緒才算終止,才能釋放自己占用的系統資源。

而分離執行緒不是這樣子的,它沒有被其他的執行緒所等待,自己執行結束了,執行緒也就終止了,馬上釋放系統資源。程式設計師應該根據自己的需要,選擇適當的分離狀態。所以如果我們在建立執行緒時就知道不需要了解執行緒的終止狀態,則可以

pthread_attr_t

結構中的

detachstate

執行緒屬性,讓執行緒以分離狀態啟動。

2

.名稱::

pthread_attr_getdetachstate/pthread_attr_setdetachstate

功能:獲取

/修改執行緒的分離狀態屬性

標頭檔案:

#include

函式原形:

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

int pthread_attr_setdetachstate(pthread_attr_t *attr,int detachstate);

引數:attr  

執行緒屬性變數

detachstate 

執行緒的分離狀態屬性

返回值:

若成功返回

0,若失敗返回-1。

可以使用

pthread_attr_setdetachstate

函式把執行緒屬性

detachstate

設定為下面的兩個合法值之一:設定為

pthread_create_detached,

以分離狀態啟動執行緒;或者設定為

pthread_create_joinable,

正常啟動執行緒。可以使用

pthread_attr_getdetachstate

函式獲取當前的

datachstate

執行緒屬性。

以分離狀態建立執行緒

#iinclude

void *child_thread(void *arg)

int main(int argc,char *argv[ ])

三、執行緒的繼承性

函式

pthread_attr_setinheritsched

和pthread_attr_getinheritsched

分別用來設定和得到執行緒的繼承性,這兩個函式的定義如下:

3.名稱::

pthread_attr_getinheritsched

pthread_attr_setinheritsched

功能:獲得

/設定執行緒的繼承性

標頭檔案:

#include

函式原形:

int pthread_attr_getinheritsched(const pthread_attr_t *attr,int *inheritsched);

int pthread_attr_setinheritsched(pthread_attr_t *attr,int inheritsched);

引數:attr            

執行緒屬性變數

inheritsched    

執行緒的繼承性

返回值:

若成功返回

0,若失敗返回-1。

這兩個函式具有兩個引數,第

1個是指向屬性物件的指標,第

2個是繼承性或指向繼承性的指標。繼承性決定排程的引數是從建立的程序中繼承還是使用在

schedpolicy

和schedparam

屬性中顯式設定的排程資訊。

pthreads

不為inheritsched

指定預設值,因此如果你關心執行緒的排程策略和引數,必須先設定該屬性。

繼承性的可能值是

pthread_inherit_sched

(表示新現成將繼承建立執行緒的排程策略和引數)和

pthread_explicit_sched

(表示使用在

schedpolicy

和schedparam

屬性中顯式設定的排程策略和引數)。

如果你需要顯式的設定乙個執行緒的排程策略或引數,那麼你必須在設定之前將

inheritsched

屬性設定為

pthread_explicit_sched.

下面我來講程序的排程策略和排程引數。我會結合下面的函式給出本函式的程式例子。

Posix多執行緒程式設計學習筆記(二) 執行緒屬性(3)

六 執行緒的作用域 函式 pthread attr setscope 和pthread attr getscope 分別用來設定和得到執行緒的作用域,這兩個函式的定義如下 7 名稱 pthread attr setscope pthread attr getscope 功能 獲得 設定執行緒的作用域...

Posix多執行緒程式設計學習筆記(二) 執行緒屬性(2)

四 執行緒的排程策略 函式 pthread attr setschedpolicy 和pthread attr getschedpolicy 分別用來設定和得到執行緒的排程策略。4.名稱 pthread attr getschedpolicy pthread attr setschedpolicy ...

Posix多執行緒程式設計學習筆記(二) 執行緒屬性(2)

四 執行緒的排程策略 函式pthread attr setschedpolicy和pthread attr getschedpolicy分別用來設定和得到執行緒的排程策略。4.名稱 pthread attr getschedpolicy pthread attr setschedpolicy 功能 ...