C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 有关pthread调度程序和优先级的问题大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Debian 7上使用 gcc c 4.7.我想为我的线程设置一些优先级.看起来我必须通过pthread来做到这一点.我对调度程序策略和pthread中的优先级感到困惑.

Q1:

我在我的c代码中使用sched_setscheduler将线程调度程序设置为scheD_RR.这个过程中的所有线程都会使用这个实时调度程序吗?或者我可以在一个进程中针对不同的线程使用不同的调度程序策略?

Q2:

线程优先级是仅在进程内部还是跨多个进程生效?例如.我有两个使用scheD_RR的进程.一个具有优先级为99的线程,另一个具有优先级为98的线程.前一个线程的优先级高于后者吗?如果线程使用不同的调度程序,如何比较它们的优先级怎么办?

Q3:

@R_255_10675@用什么“认”号码作为调度程序的优先级?例如.我使用下面的代码

struct sched_param param;
param.sched_priority = default_priority;
sched_setscheduler(0,scheD_RR,&param));

我应该将什么值设置为default_priority?我的程序中有一些高优先级线程,普通优先级线程和一些低优先级线程.在1-99中,@R_255_10675@用多少个优先级?

Q4:

进程优先级和线程优先级混合.例如,我可以使用Nice来设置进程优先级.如果一个进程具有较低的进程优先级,但在我的代码中,我将其线程设置为高优先级.这会覆盖进程优先级设置吗?

解决方法

我用Google搜索并阅读各种文件.我想我可以在这里回答我自己的问题.

Pthread具有争用范围属性.它可能是PTHREAD_SCOPE_SYstem或PTHREAD_SCOPE_PROCESs.它不需要在它们上实现. Linux仅支持PTHREAD_SCOPE_SYstem,这意味着来自所有进程的所有线程都相互竞争.此外,在Linux中,线程本质上是一个轻量级进程.进程调度程序不会在调度中以不同方式处理进程和线程.

解答.
Q1:
同一进程中的线程可以有不同的调度策略和优先级.

Q2:
线程跨进程竞争.

Q3:
我可以使用一些任意数字.每个优先级(从1到99)将在调度中拥有自己的队列.

Q4:
nice值在LinuxscheD_OTHER策略中使用.当scheD_RR或scheD_FIFO等实时策略用于线程时,nice值无效.由于scheD_RR和scheD_FIFO的最小优先级为1,scheD_OTHER的优先级只能为0.因此,具有实时策略的线程始终具有调度优先级而非非实时优先级.

答案仅适用于Linux.其他操作系统如BSD,Solaris可能有不同的pthread实现.

大佬总结

以上是大佬教程为你收集整理的c – 有关pthread调度程序和优先级的问题全部内容,希望文章能够帮你解决c – 有关pthread调度程序和优先级的问题所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。