如何修改主线程的调度策略

fkengun 2010-04-25 08:55:38
我现在想要将主线程的调度策略从默认的SCHED_OTHER修改为SCHED_RR,根据查阅的资料来看应该是调用pthread_setschedparam这个函数,但是我调用的时候要么没有设置成功,要么就是Invalid argument。我确定我是用root用户编译以及运行的程序,所以不能够理解,希望能够有人为我解答,谢谢。

代码如下:

#include <stdio.h>
#include <pthread.h>
#include <sched.h>
main()
{
struct sched_param param;
int policy;

if (pthread_getschedparam(pthread_self(), &policy, ¶m) != 0)
perror("pthread_getschedparam:");

printf("sched_priority:%d\n", param.sched_priority);

if (pthread_setschedparam(pthread_self(), SCHED_FIFO, ¶m) != 0)
perror("pthread_setschedparam:");

if (pthread_getschedparam(pthread_self(), &policy, ¶m) != 0)
perror("pthread_getschedparam:");

if (policy == SCHED_RR)
printf("policy is SCHED_RR\n");
else if (policy == SCHED_OTHER)
printf("policy is SCHED_OTHER\n");
else if (policy == SCHED_FIFO)
printf("policy is SCHED_FIFO\n");
else
printf("policy is %d\n", policy);

while (1)
{
printf("In while (1)\n");
sleep(5);
}

return 0;
}
...全文
283 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fkengun 2010-05-13
  • 打赏
  • 举报
回复
解决了 最后还是把进程的优先级给改了 实际上还是不算根本解决 就这样结贴吧
howema 2010-04-28
  • 打赏
  • 举报
回复
改变调度策略应该是要进入内核态吧
看看内核代码
fkengun 2010-04-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiaowai0219 的回复:]

我看到的是pthread_setschedparam()不支持修改调度策略,只是改优先级。。。
[/Quote]
那请问是用什么函数来修改呢,没有pthread_setschedpolicy这个函数啊,我看了pthread_setschedparam的man page,没说这个只是用来设置优先级的啊,帮帮忙啊
fkengun 2010-04-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xiaowai0219 的回复:]

我在pthread.h里面看到这个int pthread_attr_setschedpolicy (pthread_attr_t *, int);
还试过,没百度过,不晓得干什么的
[/Quote]
这是用来设置线程属性的,但是是设置pthread_attr_t这个结构体,之后传给pthread_create,这个函数只能在线程开始设置调度策略。主线程一开始就有了,怎么修改呢
Superisys 2010-04-27
  • 打赏
  • 举报
回复
我在pthread.h里面看到这个int pthread_attr_setschedpolicy (pthread_attr_t *, int);
还试过,没百度过,不晓得干什么的
Superisys 2010-04-26
  • 打赏
  • 举报
回复
我看到的是pthread_setschedparam()不支持修改调度策略,只是改优先级。。。

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧