現在のスレッドの優先度を変更する次のコードがあります。パラメータとして 90 を渡しましたが、スレッドが優先度 19 で実行されているようです。
- ulimit -r が 99 に設定されていることを確認しました
- プロセスはルートとして実行されています
プロセスが優先度 19 で実行されていることを確認するにはどうすればよいですか。次のコマンドを実行しました。ご覧のとおり、pri は 19 です。また、rtprio と pri の違いは何ですか? Redhat Enterprise Linux バージョン 6.3 の 2.6 カーネルを使用しています。これはリアルタイム Linux ではないため、if(pthread_setschedparam(pthread_self(), SCHED_RR, ¶m))
スケジューラを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, ¶m);
param.sched_priority = tPriority;
if(pthread_setschedparam(pthread_self(), SCHED_RR, ¶m))
err_sys("error while setting thread priority to %d", tPriority);
}