在嵌入式系统上(使用glibc 2.6.1的ARM处理器上的Linux内核2.6.28)我正在运行一个由多个线程组成的应用程序。我希望其中一个线程比其他线程获得更多的CPU时间。
设置优先级的一个选项似乎是使用pthread
\ {{{}}与_setschedparam
\ SCHED
(或_RR
\ SCHED
)但是这给线程提供了太多的CPU(除非它休眠,它会从仍在使用_FIFO
的其他线程中消耗掉所有CPU。)
另一种选择是设置好线程的好处。然而,虽然这正是我正在寻找的(线程只是获得更多的CPU,但不能饿死其他线程),我无法让它正常工作。根据手册页“线程不共享一个共同的好的值”,我将其解释为我可以在同一个进程中为不同的线程设置单独的nice值。
这是我的代码:
SCHED_OTHER
然而,似乎所有线程中的tid都是相同的。在调用pid_t tid;
tid = syscall(SYS_gettid);
int ret = setpriority(PRIO_PROCESS, tid, priority);
时,为线程设置单独的nice级别仍将返回所有线程中的最新set nice级别。从性能来看这是一致的(即运行线程A和线程B具有相同的任务,然后将A设置为-19,将B设置为19,两者将大致完成相同的时间)。
然而,当运行线程A,然后将其设置为-19然后运行B并将其设置为+19时,B将以全功率运行(在A之前完成)。
所以看起来线程在运行时会使用漂亮的级别设置,之后无法更改它。
我为了更多信息或任何形式的确认而疯狂地搜索,但到目前为止我发现的所有内容都相当含糊。这里有没有关于如何在Linux上处理好线程级别的任何描述(2.6.28,glibc 2.6.1)?我怎么可能改变已经运行的线程的漂亮水平?
答案 0 :(得分:7)
使用正确的tid一切正常。
现在我该如何删除这个问题?