四、執行緒的排程策略
函式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多執行緒程式設計學習筆記(二) 執行緒屬性(2)
四 執行緒的排程策略 函式pthread attr setschedpolicy和pthread attr getschedpolicy分別用來設定和得到執行緒的排程策略。4.名稱 pthread attr getschedpolicy pthread attr setschedpolicy 功能 ...