一.執行緒屬性
執行緒具有屬性,用
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 功能 ...