CPU调度算法

任务一
了解 CPU 的几种调度算法,了解其工作原理及其优先级设定等一些相关参数的设置。
使用 pthread_attr_getschedpolicy 方法获取指定线程的调度算法,利用 sched_get_priority_max
sched_get_priority_min 可以获取到指定调度算法可以设置的最大 / 最小优先级,
pthread_attr_setschedpolicy 方法可以设置线程的调度算法。
创建一个线程,获取该线程当前的调度算法以及该调度算法可以设置的最大 / 最小优先级,然后再获
取到除该调度算法外的另外两种调度算法的可以设置的最大 / 最小优先级。获取当前线程的优先级,并尝
试手动设置该线程的调度策略,最后恢复该线程的调度策略。
代码段
//需要用到的头文件
#include <unistd.h>
#include <pthread.h>
#include <sched.h>
#include <stdio.h>
//任务中可能用到的一些方法
//获取线程的调度算法
static int get_thread_policy(pthread_attr_t attr)
{
	int policy;
	pthread_attr_getschedpolicy(&attr, &policy);
	switch(policy)
	{
	//实时调度策略 先到先服务
	case SCHED_FIFO:
		printf("policy = SCHED_FIFO\n");
		break;
	//时间片轮转调度算法
	case SCHED_RR:
		printf("policy = SCHED_RR\n");
		break;
	//分时调度算法
	case SCHED_OTHER:
		printf("policy = SCHED_OTHER\n");
		break;
	default:
		printf("policy = UNKOWN\n");
		break;
	}
	return policy;
}
//获取指定调度算法可以设置的最大/最小优先级
static void show_thread_priority(pthread_attr_t attr,int policy)
{
	int priority = sched_get_priority_max(policy);
	printf("max_priority = %d\n",priority);
	priority = sched_get_priority_min(policy);
	printf("min_priority = %d\n",priority);
}
//获取给定线程的优先级
static int get_thread_priority(pthread_attr_t attr)
{
	struct sched_param param;
	pthread_attr_getschedparam(&attr, &param);
	printf("priority = %d\n", param.sched_priority);
	return param.sched_priority;
}
//设置线程的调度算法
static void set_thread_policy(pthread_attr_t attr,int policy)
{
	pthread_attr_setschedpolicy(&attr,policy);
	get_thread_policy(attr);
}

int main()
{
	pthread_attr_t attr;
	pthread_attr_init(&attr);
	int policy;
	policy=get_thread_policy(attr);
        printf("curent:show_thread_priority\n");
	show_thread_priority(attr,policy);
	printf("SCHED_FIFO:show_thread_priority\n");
	show_thread_priority(attr,SCHED_FIFO);
	printf("SCHED_RR:show_thread_priority\n");
	show_thread_priority(attr,SCHED_RR);
	printf("SCHED_OTHER:show_thread_priority\n");
	show_thread_priority(attr,SCHED_OTHER);
	printf("current:get_thread_priority\n");
	get_thread_priority(attr);
	printf("SCHED_RR:set_thread_policy\n");
	set_thread_policy(attr,SCHED_RR);
	printf("SCHED_FIFO:set_thread_policy\n");
	set_thread_policy(attr,SCHED_FIFO);
	printf("reset:set_thread_policy\n");
	set_thread_policy(attr,policy);
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想要变成乐子哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值