linux下线程优先级(属性) (当前线程的调度策略(是否允许设置优先级)。允许的最大优先级,最小优先级。如何设定优先级)

如何设置线程的优先级?
在讨论这个问题的时候,我们 先要确定当前线程使用的调度策略,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_maxsched_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;                     //所要设定的线程优先级
};


 
 
 
 
 
 
 
--



--

你可能感兴趣的:(linux学习)