pthreads的好水平?

时间:2009-05-23 21:38:03

标签: linux pthreads

在嵌入式系统上(使用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)?我怎么可能改变已经运行的线程的漂亮水平?

1 个答案:

答案 0 :(得分:7)

Errm,一旦我发布了这个问题,我突然意识到我的错误 - 我通过从主线程调用函数来设置好的级别,所以当然它们都具有相同的线程ID(因为它在上下文中执行)主线)。 DOH !!!!

使用正确的tid一切正常。

现在我该如何删除这个问题?