thread_setsched 子例程

用途

更改了内核线程的调度策略和优先级。

标准 C 库 (libc.a)

语法

#include <sys/sched.h>
#include <sys/pri.h>
#include <sys/types.h>

int thread_setsched ( tid,  priority,  policy)
tid_t tid;
int priority;
int policy;

描述

thread_setsched 子例程更改了内核线程的调度策略和优先级。 用户线程 (pthread) 有自己的调度属性,在某些情况下允许 pthread 在多个内核线程之上执行。 因此,如果以 pthread 的名义授予策略或优先级更改,那么 pthread 争用作用域应该为 PTHREAD_SCOPE_SYSTEM

注: 使用 thread_setsched 子例程时必须谨慎,因为不正确使用可能导致系统挂起。 有关线程优先级的限制,请参阅 sys/pri.h

参数

描述
tid 指定将更改其优先级和策略的线程的内核线程标识。
优先级 (priority) 指定要用于此内核线程的优先级。 如果将策略设置为 其他模式,那么将忽略优先级参数。 优先级参数必须 0 范围在 0 到 PRI_LOW之间的值。 PRI_LOWsys/pri.h中定义。 有关线程优先级的更多信息,请参阅 sys/pri.h
策略 指定要用于此内核线程的策略。 策略参数可以是下列其中一个值,在 sys/sched.h中定义:
SCHED_OTHER
缺省操作系统调度策略。
SCHED_FIFO
"先入先出" 调度策略。
SCHED_FIFO2
允许将睡眠时间相对较短的线程重新排队到其优先级运行队列的头 (而不是尾)。
SCHED_FIFO3
使线程排队到它们的运行队列的头。
SCHED_FIFO4
这是第一个具有弱抢占的 "先入为主" 调度策略。 现有正在运行的线程不会被更高优先级的 SCHED_FIFO4 线程抢占,除非该线程的优先级比现有线程高 1 倍以上。
SCHED_RR
循环法调度策略。

返回值

在成功完成时, thread_setsched 子例程返回值零。 如果thread_setsched子程序不成功,则返回值为-1,并设置errno全局变量来指示错误。

错误代码

如果以下一个或多个条件成立,那么 thread_setsched 子例程不成功:

描述
ESRCH 内核线程标识为 标识 无效。
EINVAL 该策略或优先级无效。
EPERM 调用者没有足够的权限来更改策略或优先级。