首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pthreads的不错级别?

pthreads的不错级别?
EN

Stack Overflow用户
提问于 2009-05-23 21:38:03
回答 1查看 8.4K关注 0票数 14

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

设置优先级的一种选择似乎是将pthread \ _setschedparamSCHED \ _RR (或SCHED \ CPU )一起使用,但是这会给线程提供太多的CPU (除非它休眠,否则它会吃掉仍在使用SCHED_OTHER的其他线程的所有CPU)。

另一种选择是设置线程的良好级别。然而,虽然这正是我想要的(线程只会获得更多的CPU,但不会让其他线程挨饿),但我无法让它正常工作。根据手册页“线程不共享共同的nice值”,我将其解释为我可以在同一进程中为不同的线程设置单独的nice值。

下面是我的代码:

代码语言:javascript
复制
pid_t tid;
tid = syscall(SYS_gettid);

int ret = setpriority(PRIO_PROCESS, tid, priority);

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

然而,当运行线程A,然后将其设置为-19,然后运行B并将其设置为+19时,B将以最大功率运行(远远领先于A)。

因此,看起来线程将使用运行时设置的很好的级别,以后无法更改它。

我疯狂地在谷歌上搜索更多信息或任何形式的确认,但到目前为止我找到的都是相当模糊的信息。这里有没有人能描述一下Linux (2.6.28,glibc 2.6.1)上的线程级别是如何处理的?我怎么可能改变一个已经运行的线程的良好级别呢?

EN

回答 1

Stack Overflow用户

发布于 2009-05-23 21:56:22

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

使用正确的tid,一切工作正常。

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/902539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档