C++线程调度策略

一 点睛

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

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值