C++线程调度策略

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengqiuming/article/details/89058862

一 点睛

Linux调度策略可以分为3种

1 SCHED_OTHER:表示分时调度策略(也称轮转策略),是一种非实时调度策略,系统会为每一个线程分配一段运行时间,称为时间片。

2 SCHED_FILO:先来先服务策略,支持优先级抢占。CPU让一个先来的线程执行完再调度下一个线程,顺序就是按照创建线程的先后。线程一旦占用CPU就会一直运行,直到有更高级的任务达到或自己放弃CPU。

3 SCHED_RR:表示时间片轮转调度策略,但支持优先级抢占,因此也是一种实时调度策略。

二 代码

#include <stdio.h>
#include <unistd.h>
#include <sched.h>
int main()
{
    printf("Valid priority range for SCHED_OTHER: %d - %d\n",
        sched_get_priority_min(SCHED_OTHER),
        sched_get_priority_max(SCHED_OTHER));
    printf("Valid priority range for SCHED_FIFO: %d - %d\n",
        sched_get_priority_min(SCHED_FIFO),
        sched_get_priority_max(SCHED_FIFO));
    printf("Valid priority range for SCHED_RR: %d - %d\n",
        sched_get_priority_min(SCHED_RR),
        sched_get_priority_max(SCHED_RR));
    
    return 0;        
}

三 运行 

[root@localhost test]# g++ -o test test.cpp -lpthread
[root@localhost test]# ./test
Valid priority range for SCHED_OTHER: 0 - 0
Valid priority range for SCHED_FIFO: 1 - 99
Valid priority range for SCHED_RR: 1 - 99

四 说明

对于SCHED_FIFO和SCHED_RR调度策略,由于支持优先级抢占,因此具有高优先级别的可运行(就绪状态下的)线程总是先运行。如果一个正在运行的线程在未完成其时间片时,出现一个更高优先级的线程就绪,那么正在运行的这个线程就可能在未完成其时间片前被抢占。

猜你喜欢

转载自blog.csdn.net/chengqiuming/article/details/89058862
今日推荐