sched_setscheduler()函数

2019-07-13 09:22发布

sched_setscheduler()函数用以修改线程的调度策略以及调度参数。

一 函数原型

#include 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不存在。