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

2021-06-03 02:43:34 字數 2464 閱讀 1693

四、執行緒的排程策略

函式pthread_attr_setschedpolicy和pthread_attr_getschedpolicy分別用來設定和得到執行緒的排程策略。

4. 名稱::

pthread_attr_getschedpolicy

pthread_attr_setschedpolicy

功能:獲得/設定執行緒的排程策略

標頭檔案:

#include

函式原形:

int pthread_attr_getschedpolicy(const pthread_attr_t *attr,int *policy);

int pthread_attr_setschedpolicy(pthread_attr_t *attr,int policy);

引數:attr           執行緒屬性變數

policy         排程策略

返回值:

若成功返回0,若失敗返回-1。

這兩個函式具有兩個引數,第1個引數是指向屬性物件的指標,第2個引數是排程策略或指向排程策略的指標。排程策略可能的值是先進先出(sched_fifo)、輪轉法(sched_rr),或其它(sched_other)。

sched_fifo策略允許乙個執行緒執行直到有更高優先順序的執行緒準備好,或者直到它自願阻塞自己。在sched_fifo排程策略下,當有乙個執行緒準備好時,除非有平等或更高優先順序的執行緒已經在執行,否則它會很快開始執行。

sched_rr(輪循)策略是基本相同的,不同之處在於:如果有乙個sched_rr

策略的執行緒執行了超過乙個固定的時期(時間片間隔)沒有阻塞,而另外的sched_rr或schbd_fipo策略的相同優先順序的執行緒準備好時,執行的執行緒將被搶占以便準備好的執行緒可以執行。

當有sched_fifo或sched_rr策賂的執行緒在乙個條件變數上等持或等持加鎖同乙個互斥量時,它們將以優先順序順序被喚醒。即,如果乙個低優先順序的sched_fifo執行緒和乙個高優先織的sched_fifo執行緒都在等待鎖相同的互斥且,則當互斥量被解鎖時,高優先順序執行緒將總是被首先解除阻塞。

五、執行緒的排程引數

函式pthread_attr_getschedparam 和pthread_attr_setschedparam分別用來設定和得到執行緒的排程引數。

5. 名稱::

pthread_attr_getschedparam

pthread_attr_setschedparam

功能:獲得/設定執行緒的排程引數

標頭檔案:

#include

函式原形:

int pthread_attr_getschedparam(const pthread_attr_t *attr,struct sched_param *param);

int pthread_attr_setschedparam(pthread_attr_t *attr,const struct sched_param *param);

引數:attr           執行緒屬性變數

param          sched_param結構

返回值:

若成功返回0,若失敗返回-1。

這兩個函式具有兩個引數,第1個引數是指向屬性物件的指標,第2個引數是sched_param結構或指向該結構的指標。結構sched_param在檔案/usr/include /bits/sched.h中定義如下:

struct sched_param ;

結構sched_param的子成員sched_priority控制乙個優先權值,大的優先權值對應高的優先權。系統支援的最大和最小優先權值可以用sched_get_priority_max函式和sched_get_priority_min函式分別得到。

注意:如果不是編寫實時程式,不建議修改執行緒的優先順序。因為,排程策略是一件非常複雜的事情,如果不正確使用會導致程式錯誤,從而導致死鎖等問題。如:在多執行緒應用程式中為執行緒設定不同的優先級別,有可能因為共享資源而導致優先順序倒置。

6. 名稱::

sched_get_priority_max

sched_get_priority_min

功能:獲得系統支援的執行緒優先權的最大和最小值

標頭檔案:

#include

函式原形:

int sched_get_priority_max(int policy);

int sched_get_priority_min(int policy);

引數:policy           系統支援的執行緒優先權的最大和最小值

返回值:

若成功返回0,若失敗返回-1。

下面是上面幾個函式的程式例子:

#include

#include

void *child_thread(void *arg)

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

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多執行緒程式設計學習筆記(二) 執行緒屬性(1)

一 執行緒屬性 執行緒具有屬性,用 pthread attr t 表示,在對該結構進行處理之前必須進行初始化,在使用後需要對其去除初始化。我們用 pthread attr init 函式對其初始化,用 pthread attr destroy 對其去除初始化。1 名稱 pthread attr in...