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_FIFO或SCHED_RR 的根权限。
注意: pthread.h头文件必须是使用线程库的每个源文件的第一个包含文件。 否则,应使用-D_THREAD_SAFE编译标志,或使用 cc_r 编译器。 在这种情况下,会自动设置标志。
此子例程是基本操作系统 (BOS) 运行时的一部分。 该子程序的执行取决于优先级调度POSIX选项。 优先级调度 POSIX 选项在操作系统中实现。
参数
| 项 | 描述 |
|---|---|
| 线程 | 指定目标线程。 |
| schedpolicy | 指向要设置的 schedpolicy 属性。 它必须具有下列其中一个值:
注: 具有进程争用作用域和 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 | thread 或 schedparam 参数无效。 |
| ENOSYS | 未实现优先级调度 POSIX 选项。 |
| ENOTSUP | schedpolicy 或 schedparam 属性的值不受支持。 |
| EPERM | 目标线程没有足够的许可权来执行操作或已参与互斥协议。 |
| ESRCH | 线程 thread 不存在。 |