当前位置: 技术问答>linux和unix
线程优先级设置问题?
来源: 互联网 发布时间:2016-03-23
本文导语: 我想把一个采集线程的优先级设的比存储线程高一些,因为有的时候存储线程影响采集线程! 默认线程的调试是SCHED_OTHER,可它没有优先级可调!从这可以看出,都是0。 printf("thread max:%d, min:%dn", sched_get_priority_max(SC...
我想把一个采集线程的优先级设的比存储线程高一些,因为有的时候存储线程影响采集线程!
默认线程的调试是SCHED_OTHER,可它没有优先级可调!从这可以看出,都是0。
我看书中用这几个函数:
它们是这样一个顺序使用吧?最后把attr这个参数传给线程建立函数吧?还是在建立好的线程里设置。
我是按上面使用的,可是程序进入后好像没有设置的线程都不动了,只设置了SCHED_RR的线程在走。
哪位能详细的说一下调用顺序?
最后再问一下pthread_setschedparam()这个函数怎么用?它和pthread_attr_getschedparam()是什么区别?先不胜感谢!
默认线程的调试是SCHED_OTHER,可它没有优先级可调!从这可以看出,都是0。
printf("thread max:%d, min:%dn", sched_get_priority_max(SCHED_OTHER), sched_get_priority_min(SCHED_OTHER));
我看书中用这几个函数:
pthread_attr_init()
pthread_attr_setschedpolicy()
pthread_attr_setschedparam()
pthread_attr_destroy()
它们是这样一个顺序使用吧?最后把attr这个参数传给线程建立函数吧?还是在建立好的线程里设置。
pthread_attr_init(&attr);
pthread_attr_setschedpolicy(&attr, SCHED_RR);
pthread_attr_getschedparam(&attr, ¶m);
param.sched_priority=20;
pthread_attr_setschedparam(&attr, ¶m);
pthread_create(&tid, &attr, (void *)myfunction, myarg);
我是按上面使用的,可是程序进入后好像没有设置的线程都不动了,只设置了SCHED_RR的线程在走。
哪位能详细的说一下调用顺序?
最后再问一下pthread_setschedparam()这个函数怎么用?它和pthread_attr_getschedparam()是什么区别?先不胜感谢!
|
既然你想用线程优先级来管理,那不就是你想要得结果么?
被指定优先的线程占用了cpu,级别不够的线程要等指定线程释放资源才能执行。
对于这个结果有什么问题么?
从你的现象上说,建议采用别的系统构架来避免问题。
可能的方法:
1、调整存储参数
2、建立swap区,多进程/线程处理swap区数据,减少存储时间损耗
3、……
被指定优先的线程占用了cpu,级别不够的线程要等指定线程释放资源才能执行。
对于这个结果有什么问题么?
从你的现象上说,建议采用别的系统构架来避免问题。
可能的方法:
1、调整存储参数
2、建立swap区,多进程/线程处理swap区数据,减少存储时间损耗
3、……
|
我看你调用的顺序顺序应该没有什么问题啊。
pthread_setschedparam:设置线程调度参数;
pthread_attr_getschedparam:得到线程调度设置
pthread_setschedparam:设置线程调度参数;
pthread_attr_getschedparam:得到线程调度设置