Menu Home

多线程

Linux线程的调度策略与优先级

调度策略有3种: SCHED_OTHER: 分时调度策略。线程的默认策略。此策略不能设置线程优先级。 SCHED_FIFO: 实时调度策略,先到先服务。一旦线程占用cpu则一直运行。直到有更高优先级任务到达或自己放弃。此策略可设置线程优先级。 SCHED_RR: 实时调度策略,时间片轮转。当进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。保证了所有具有相同优先级的RR任务的调度公平此策略可设置线程优先级。 这3个宏在 sched.h 中定义。 线程优先级: 不同操作系统的优先级范围是不相同的,所以在设置线程优先级的时候需要先使用下面2个函数来查询其最大值和最小值: int sched_get_priority_max(int policy); int sched_get_priority_min(int policy); 参数policy是上面介绍的调度策略中的SCHED_FILO或SCHED_RR,注意不能是SCHED_OTHER,因为SCHED_OTHER不支持优先级。 查询和设置调度策略: int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param); int pthread_attr_getschedparam(pthread_attr_t *attr, struct sched_param *param); 查询和设置线程优先级: 查询: struct sched_param param; //首先查询线程的调度策略,赋给param //参数attr是create线程时所使用的线程属性 pthread_attr_getschedparam(attr, &param); //从sched_param结构中获取线程优先级 param.__sched_priority; 设置: pthread_attr attr; struct sched_param param; […]