如何设置线程的优先级?
在讨论这个问题的时候,我们
先要确定当前线程使用的调度策略,posix提供了
//获取调度策略 (调度策略)
int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy);
函数来获取所使用的调度策略,它们是:
SCHED_FIFO, SCHED_RR 和 SCHED_OTHER。
//获取可以设置的最大最小优先级的值 (优先级的取值范围的确定)
我们可以使用
//调度策略与优先级的取值 (调度策略与优先级之间的关系)
我们可以使用
int sched_get_priority_max(int policy);
int sched_get_priority_min(int policy);
来获取线程可以设置的最大和最小的优先级值,如果调用成功就返回最大和最小的优先级值,否则返回-1。
//调度策略与优先级的取值 (调度策略与优先级之间的关系)
SCHED_OTHER是
不支持优先级使用的。
而
SCHED_FIFO和SCHED_RR支持优先级的使用。
数值越大优先级越高。
//如何设置调度策略与优先级 (非常重要,如何设置调度策略与优先级)
一般是用
pthread_attr_getschedpolicy来获取系统使用的调度策略,如果是SCHED_OTHER的话,
表明当前策略不支持线程优先级的使用,否则可以。当然所设定的优先级范围必须在最大和最小值之间。
我们可以通过
sched_get_priority_max
和
sched_get_priority_min来获取。
是否我们可以通过?????
int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);
来设定自己所需的调度策略呢?我觉得是完全可以的(有些系统需要定义
_POSIX_THREAD_PRIORITY_SCHEDULING),只要
系统实现了对应的调用策略。
在系统允许设定线程优先级的情况下如何设定线程优先级????
在系统允许使用线程优先级别的时候,如何设置优先级别呢?
int pthread_attr_setschedparam(pthread_attr_t *attr,
const struct sched_param *param);
int pthread_attr_getschedparam(const pthread_attr_t *attr,
struct sched_param *param);
上面两个函数分别用于设置线程的优先级,struct sched_param的定义如下
struct sched_param
{
int __sched_priority; //所要设定的线程优先级
};