c – 有关pthread调度程序和优先级的问题
我在Debian 7上使用
gcc c 4.7.我想为我的线程设置一些优先级.看起来我必须通过pthread来做到这一点.我对调度程序策略和pthread中的优先级感到困惑.
Q1: 我在我的c代码中使用sched_setscheduler将线程调度程序设置为SCHED_RR.这个过程中的所有线程都会使用这个实时调度程序吗?或者我可以在一个进程中针对不同的线程使用不同的调度程序策略? Q2: 线程优先级是仅在进程内部还是跨多个进程生效?例如.我有两个使用SCHED_RR的进程.一个具有优先级为99的线程,另一个具有优先级为98的线程.前一个线程的优先级高于后者吗?如果线程使用不同的调度程序,如何比较它们的优先级怎么办? Q3: 我应该使用什么“默认”号码作为调度程序的优先级?例如.我使用下面的代码: struct sched_param param; param.sched_priority = default_priority; sched_setscheduler(0,SCHED_RR,¶m)); 我应该将什么值设置为default_priority?我的程序中有一些高优先级线程,普通优先级线程和一些低优先级线程.在1-99中,我应该使用多少个优先级? Q4: 进程优先级和线程优先级混合.例如,我可以使用nice来设置进程优先级.如果一个进程具有较低的进程优先级,但在我的代码中,我将其线程设置为高优先级.这会覆盖进程优先级设置吗? 解决方法
我用Google搜索并阅读各种文件.我想我可以在这里回答我自己的问题.
Pthread具有争用范围属性.它可能是PTHREAD_SCOPE_SYSTEM或PTHREAD_SCOPE_PROCESS.它不需要在它们上实现. Linux仅支持PTHREAD_SCOPE_SYSTEM,这意味着来自所有进程的所有线程都相互竞争.此外,在Linux中,线程本质上是一个轻量级进程.进程调度程序不会在调度中以不同方式处理进程和线程. 解答. Q2: Q3: Q4: 答案仅适用于Linux.其他操作系统如BSD,Solaris可能有不同的pthread实现. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |