sched_setscheduler()函數用以修改線程的調度策略以及調度參數。 一 函數原型
#include <sched.h>int sched_setscheduler(pid_t pid, int policy, const struct sched_param *param);
二 參數說明
pid:表示要修改/設定調度參數的目標線程,如果傳入的參數pid為0則目標線程是調用該函數的線程;
policy: 表示目標線程的調度策略。目前linux對於sched_setscheduler()函數支援如下調度策略:
1) SCHED_OTHER 標準的CFS調度策略;
2) SCHED_BATCH 針對"batch" 類型的任務,切換沒有SCHED_OTHER頻繁;
3) SCHED_IDLE 適用於以低優先順序啟動並執行背景工作。
上面三個任務都屬於普通調度策略(非real-time調度策略),且採用上面三個policy其中一種時,第三個參數param->sched_priority必須設定為0,否則運行時會調用失敗。
4) SCHED_FIFO FIFO方式的即時調度策略;
5) SCHED_RR 輪轉方式的即時調度策略。
對於響應或者延遲有要求的任務可以通過SCHED_FIFO和SCHED_RR設定為即時調度策略。
param: 它是一個如下的結構指標類型
struct sched_param { ... int sched_priority; ...};
Param->sched_priority用以指定目標線程的優先順序,這也是sched_setscheduler()函數對於param比較普遍的用法。
傳回值:
函數調用成功時返回0;而失敗或者出錯時返回-1,並設定errno值。下面是失敗時,設定不同errno的情況:
EINVAL: 無效參數。Pid小於0或者param 為 NULL;
EINVAL: 參數policy 不是上面提到的幾種,無法識別;
EINVAL: 參數param(或者param結構中的值)對於指定的policy無意義;
EPERM : 函數調用者沒有許可權;
ESRCH : 傳入的pid不存在。