pthread_setschedparam 子例程

用途

设置线程的 "schedpolicy和 "schedparam属性。

线程库libpthreads.a

语法

#include <pthread.h>
#include <sys/sched.h>

int pthread_setschedparam (thread, schedpolicy, schedparam)
pthread_t thread;
int schedpolicy;
const struct sched_param *schedparam;

描述

pthread_setschedparam子程序动态设置线程的 schedpolicy 和 schedparam 属性。 schedpolicy 属性指定线程的调度策略。 schedparam 属性指定了使用此属性对象创建的线程的调度参数。 该sched_priority字段包含线程优先级。 它是整数值。

如果目标线程具有系统争用范围,进程必须具有将调度策略设置为SCHED_FIFOSCHED_RR 的根权限。

注意: pthread.h头文件必须是使用线程库的每个源文件的第一个包含文件。 否则,应使用-D_THREAD_SAFE编译标志,或使用 cc_r 编译器。 在这种情况下,会自动设置标志。

此子例程是基本操作系统 (BOS) 运行时的一部分。 该子程序的执行取决于优先级调度POSIX选项。 优先级调度 POSIX 选项在操作系统中实现。

参数

描述
线程 指定目标线程。
schedpolicy 指向要设置的 schedpolicy 属性。 它必须具有下列其中一个值:
SCHED_FIFO
表示先进先出调度。
SCHED_RR
表示循环调度。
SCHED_OTHER
表示缺省操作系统调度策略。 这是缺省值。 如果 schedpolicy 为 SCHED_OTHER ,那么 sched_priority 必须在 40 到 80 范围内,其中 40 是最不青睐的优先级, 80 是最青睐的优先级。
注: 具有进程争用作用域和 SCHED_OTHER 策略的线程的优先级由内核控制; 因此,设置此类线程的优先级没有任何影响。 但是,可以修改具有系统争用作用域和 SCHED_OTHER 策略的线程的优先级。 修改会直接影响底层内核线程的漂亮值。
schedparam 指向要设置的调度参数的存储位置。 该sched_priority字段必须在 1 到 127 之间,其中 1 代表最不优先,127 代表最优先。 如果 schedpolicy 为 SCHED_OTHER ,那么 sched_priority 必须在 40 到 80 范围内,其中 40 是最不青睐的优先级, 80 是最青睐的优先级。

用户可以在将其调度策略设置为 SCHED_OTHER 时更改线程的优先级。 可传递给 "pthread_setschedparam的合法值从 40 到 80 不等。 只有特权用户才能设置高于 60 的优先级。 从 1 到 39 的值提供与 40 相同的优先级,而从 81 到 127 的值提供与 80 相同的优先级。

返回值

成功完成后,将返回 0。 否则,将返回错误代码。

错误代码

如果以下情况为真,则pthread_setschedparam子例程不会成功:

描述
EINVAL threadschedparam 参数无效。
ENOSYS 未实现优先级调度 POSIX 选项。
ENOTSUP schedpolicy 或 schedparam 属性的值不受支持。
EPERM 目标线程没有足够的许可权来执行操作或已参与互斥协议。
ESRCH 线程 thread 不存在。