pthreads的好水平?

14 linux pthreads

在嵌入式系统上(使用glibc 2.6.1的ARM处理器上的Linux内核2.6.28)我正在运行一个由多个线程组成的应用程序.我希望其中一个线程比其他线程获得更多的CPU时间.

设置优先级的一个选项似乎是使用pthread\ _setschedparamwith SCHED\ _RR(或SCHED\ _FIFO),但是这给线程提供了太多的CPU(除非它休眠,它会从正在使用的其他线程中消耗掉所有CPU SCHED_OTHER).

另一种选择是设置好线程的好处.然而,虽然这正是我正在寻找的(线程只是获得更多的CPU,但不能饿死其他线程),我无法让它正常工作.根据手册页"线程不共享一个共同的好的值",我解释为我可以在同一个进程中为不同的线程设置单独的nice值.

这是我的代码:

pid_t tid;
tid = syscall(SYS_gettid);

int ret = setpriority(PRIO_PROCESS, tid, priority);
Run Code Online (Sandbox Code Playgroud)

然而,似乎tid在所有线程中都是相同的.同时为线程设置单独的nice级别仍会在调用时返回所有线程中的最新set nice级别getpriority.从性能来看,这是一致的(即运行线程A和线程B具有相同的任务,然后将A设置为-19,将B设置为19,两者将大致完成相同的时间).

然而,当运行线程A,然后将其设置为-19然后运行B并将其设置为+19时,B将以全功率运行(在A之前完成).

因此,似乎一个线程将在运行时使用漂亮的级别设置,之后无法更改它.

我已经用疯狂的Google搜索了更多信息或任何形式的确认,但到目前为止我发现的所有内容都相当含糊.这里有没有关于如何在Linux上处理好线程级别的任何描述(2.6.28,glibc 2.6.1)?我怎么可能改变已经运行的线程的好水平?

小智 7

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

使用正确的tid一切正常.

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