c语言线程优先级设置,如何在pthreads中增加线程优先级?

levif的当前答案(建议SCHED_BATCH)对于Linux上的当前NPTL线程实现不正确(您可以通过运行'getconf GNU_LIBPTHREAD_VERSION'来检查内核具有哪种实现)。

在当今的内核中,仅实时调度策略允许设置sched_priority-对于非RT策略(SCHED_OTHER,SCHED_BATCH和SCHED_IDLE),该值始终为0。 对于非RT策略,您唯一的选择是设置“ nice”值,例如 通过setpriority()。 设置'nice'并不能很好地说明确切的行为,至少在理论上,它可能因内核版本而异。 对于当前的Linux内核,“ nice”具有非常强的效果,类似于优先级,因此您可以互换使用。 为了增加线程的调度频率,您想降低“ nice”值。 这需要CAP_SYS_NICE功能(通常不是root,虽然不是必需的,请参见[http://man7.org/linux/man-pages/man7/capabilities.7.html]和[http://man7.org/linux/man- pages / man3 / cap_set_proc.3.html)。]

实际上,SCHED_BATCH是为发问者所要求的相反情况而设计的:它是为CPU密集型,长时间运行的工作而设计的,这些工作可以具有较低的优先级。 它告诉调度程序稍微惩罚线程的唤醒优先级。

还要回答较早的评论之一(我还没有足够的声誉来回应这个评论-为此投票一些投票将有所帮助:))。 是的,坏消息是POSIX.1规范说“好的”影响进程,而不是单个线程。 好消息是,Linux线程实现(NPTL和原始Linux线程)都违反了规范,并使其影响单个线程。 我经常在手册页的“ BUGS”部分中指出这一点,这很有趣。 我要说的是,该错误是在POSIX.1规范中进行的,该错误应该允许这种行为发生,而不是在尽管有此规范的情况下被强迫提供该错误的实现,但该行为是有意和故意的。 换句话说-不是错误。

大部分内容在sched(7)手册页上(由于某些原因未在我的Fedora 20系统上提供):[http://man7.org/linux/man-pages/man7/sched.7.html]

如果您确实想影响sched_priority,则可以查看实时策略,例如SCHED_RR。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值