1

我有以下代码,它改变了当前线程的优先级。我传递了 90 作为参数,但看起来线程正在以优先级 19 运行。我有:

  • 检查 ulimit -r 是否设置为 99
  • 进程以root身份运行

我怎么知道该进程以优先级 19 运行。我执行了以下命令。如您所见,pri 是 19。rtprio 和 pri 之间有什么区别?我正在使用来自 redhat Enterprise linux 6.3 版的 2.6 内核。因为,这不是实时 linux,所以if(pthread_setschedparam(pthread_self(), SCHED_RR, &param))当我将调度程序设置为时,这一行在代码中是否有效SCHED_RR

ps -p 10834 -o pid,tid,class,rtprio,ni,pri,psr,pcpu,stat

PID   TID CLS RTPRIO  NI PRI PSR %CPU STAT
10834 10834 TS       -   0  19   9 99.9 R+
void changePriority(int tPriority)
{
    int  policy;
    struct sched_param param;

    pthread_getschedparam(pthread_self(), &policy, &param);
    param.sched_priority = tPriority;
    if(pthread_setschedparam(pthread_self(), SCHED_RR, &param))
            err_sys("error while setting thread priority to %d", tPriority);
}
4

1 回答 1

1

引用PRIvs. RTPRIO,逐字逐句地来自man ps

进程的 PRI 优先级。数字越大,优先级越低

...

RTPRIO 实时优先级。


PRI可以使用nice()系统调用或nice命令行工具设置。PRI是进程的主线程的优先级。对于 Linux,这还设置了进程的非实时线程的优先级*。

来自man 1 nice

Nicenesses 范围从 -20(最有利的调度)到 19(最不利的调度)。

Niceness并且PRI是同义词。

*实时线程是具有不同于 和 的调度策略的线程,SCHED_OTHER因为有:和。SCHED_BATCHSCHED_IDLESCHED_FIFOSCHED_RR


RTPRIO调度策略可以通过OP中提到的功能进行设置。

调度策略保证提供至少 32 个不同的级别。使用sched_get_priority_minsched_get_priority_max确定实施范围。

于 2013-02-15T16:01:21.987 回答