C++ 在linux中更改线程优先级和调度程序
我有一个单线程应用程序。如果我使用下面的代码,我会得到C++ 在linux中更改线程优先级和调度程序,c++,c,linux,pthreads,C++,C,Linux,Pthreads,我有一个单线程应用程序。如果我使用下面的代码,我会得到sched_setscheduler():不允许操作 但是,如果我使用下面这样的pthreadapi,我不会得到一个错误。对于单线程应用程序,这两者之间的区别是什么?下面的函数是否真的更改了调度程序和优先级,还是缺少一些错误处理 void assignRRPriority(int tPriority) { int policy; struct sched_param param; pthread_getsched
sched_setscheduler():不允许操作
但是,如果我使用下面这样的pthreadapi,我不会得到一个错误。对于单线程应用程序,这两者之间的区别是什么?下面的函数是否真的更改了调度程序和优先级,还是缺少一些错误处理
void assignRRPriority(int tPriority)
{
int policy;
struct sched_param param;
pthread_getschedparam(pthread_self(), &policy, ¶m);
param.sched_priority = tPriority;
if(pthread_setschedparam(pthread_self(), SCHED_RR, ¶m))
printf("error while setting thread priority to %d", tPriority);
}
该错误可能是由实时优先级设置的限制引起的(
ulimit-r
用于检查,ulimit-r 99
用于允许1-99个优先级)。从pthread_setschedparam
成功开始:如果编译时没有-pthread
选项,则此函数与其他pthread函数一样,只是一个存根。使用-pthread
选项,结果应该相同(strace
显示使用了相同的系统调用)。您缺少一些基本的错误处理。你需要一些钱。试试这个:
if(pthread_setschedparam(pthread_self(), SCHED_RR, ¶m) < 0) {
perror("pthread_setschedparam");
}
if(pthread_setschedparam(pthread_self(),SCHED_RR,¶m)<0){
perror(“pthread_setschedparam”);
}
1。我确实用-lpthread链接了应用程序。2.ulimit-r显示0。那么它如何解释我能够调用值为80的函数assignRRPriority呢。为什么没有出错?-lpthread
不够,需要-pthread
(编译和链接都需要)。然后,分配优先级将失败。
if(pthread_setschedparam(pthread_self(), SCHED_RR, ¶m) < 0) {
perror("pthread_setschedparam");
}