POSIX线程优先级的修改方式有静态修改、动态修改。

  • 静态修改:在线程启动前设置初始值,即修改线程属性块的值。
  • 动态修改:在线程启动后动态修改,通过posix调度函数进行动态修改。

静态修改:

在调用 pthread_create 函数创建启动线程之前,调用 pthread_attr_init 函数初始化一个线程属性对象

#include <pthread.h>
int pthread_attr_init(pthread_attr_t *pattr);

同时posix提供了一系列函数用于 获取/设置 线程属性对象各成员的值,函数的 pthread_attr_getschedparam 输入参数 pschedparam 结构体中含有存储优先级的成员变量,调用 pthread_attr_setschedparam 函数可以设置线程属性对象的调度参数,调用 pthread_attr_getschedparam 函数将获得线程属性对象的调度参数。函数定义如下图:

#include <pthread.h>
int pthread_attr_setschedparam(pthread_attr_t *pattr, const struct sched_param *pschedparam);
int pthread_attr_getschedparam(const pthread_attr_t *pattr,  struct sched_param *pschedparam);

动态修改:

进程(主线程):

posix提供了一系列线程调度函数用于动态修改线程属性,其中 sched_setscheduler 函数提供了一种动态改变线程优先级的方法。调用 sched_setscheduler 函数在设置调度策略的同时也设置了进程优先级,输入参数 pschedparam 结构体中含有存储优先级的成员变量。

#include <sched.h>
int sched_setscheduler(pid_t pid, int iPolicy, const struct sched_param *pschedparam);

也可以通过调用 sched_setparam 函数来设置进程的优先级,输入参数 pschedparam 结构体中含有存储优先级的成员变量。

#include <sched.h>
int sched_setparam(pid_t pid, const struct sched_param *pschedparam);

设置满足条件的所有线程的 SylixOS 调度优先级。

#include <sys/resource.h>
int setpriority(int which, id_t who, int value);
函数 setpriority 原型分析:
  • 此函数成功时返回 0,失败时返回-1 并设置错误号;
  • 参数 which 指定参数 who 的意义;
  • 参数 who 的意义由参数 which 指定,如下图所示:
  • 参数 value 是要设置的优先级值。

进程(主线程):

nice 函数可以调整当前进程优先级。

#include <unistd.h>
int nice(int incr);

函数 nice 原型分析:

  • 此函数成功返回 0,失败返回-1 并设置错误号;
  • 参数 incr 是要调整的数值。本函数对 incr 参数的处理流程如下:

(1) 首先获取当前进程中所有线程中的最低优先级,即数值最大的的优先级;

(2) 然后将获取到的值和 incr 参数求和;

(3) 将上一步求和的结果设置到当前进程的所有线程中。

POSIX也提供了相关函数 pthread_setschedprio 用于动态修改当前进程优先级,但 pthread_getschedprio 不属于posix 定义范围,SylixOS也给出了实现。

#include <pthread.h>int pthread_setschedprio(pthread_t thread, int prio);
int pthread_getschedprio(pthread_t thread, int *prio);

函数 pthread_setschedprio 原型分析:

  • 此函数成功返回 0,失败返回-1 并设置错误号;
  • 参数 thread 是要调整的线程id。
  • 参数 prio 是需要设置的线程优先级的数值。

POSIX线程优先级设置相关推荐

  1. linux线程调度函数,Linux调度策略及线程优先级设置

    Linux内核的三种调度策略: 1,SCHED_OTHER 分时调度策略, 2,SCHED_FIFO实时调度策略,先到先服务.一旦占用cpu则一直运行.一直运行直到有更高优先级任务到达或自己放弃 3, ...

  2. Android线程优先级设置方法技巧

    对于Android平台上的线程优先级设置来说可以处理很多并发线程的阻塞问题, 比如很多无关紧要的线程会占用大量的CPU时间,虽然通过了MultiThread来解决慢速I/O但是合理分配优先级对于并发编 ...

  3. Java 线程实例一(查看线程是否存活、获取当前线程名称、状态监测、线程优先级设置、死锁及解决方法、获取线程id、线程挂起)

    查看线程是否存活 以下实例演示了如何通过继承 Thread 类并使用 isAlive() 方法来检测一个线程是否存活: public class TwoThreadAlive extends Thre ...

  4. java设置子线程优先级_Java 实例 - 线程优先级设置

    Java 实例 - 线程优先级设置 以下实例演示了如何通过setPriority() 方法来设置线程的优先级: SimplePriorities.java 文件 public class Simple ...

  5. Linux 线程优先级设置(内含C语言版线程创建、绑定CPU和优先级设置代码)

    参考链接: https://blog.csdn.net/wushuomin/article/details/80051295 //详细讲解pthread_create 函数 https://blog. ...

  6. c语言怎么设置cpu优先级,线程优先级,设置,setPriority()方法

    package seday08.thread; /** * @author xingsir * 线程优先级 * 线程启动后纳入到线程调度,线程时刻处于被动获取CPU时间片而无法主动获取.我们可以通过调 ...

  7. 【Linux 内核】线程调度示例一 ③ ( 获取线程优先级 | 设置线程调度策略 | 代码示例 )

    文章目录 一.获取线程优先级 1.pthread_attr_setschedparam 和 pthread_attr_getschedparam 函数 2.获取线程优先级代码示例 二.设置线程调度策略 ...

  8. linux内核线程优先级设置,Linux c 线程属性,线程优先级的修改

    Linux c 线程属性,线程优先级的修改 发布时间:2018-07-19 10:24, 浏览次数:1290 , 标签: Linux 线程属性的设置,网上找的文章总感觉不够全面,还是结合man手册查看 ...

  9. Android 中设置线程优先级的正确方式(2种方法)

    Android 中设置线程优先级的正确方式(2种方法) 在 Android 中,有两种常见的设置线程优先级的方式: 第一种,使用 Thread 类实例的 setPriority 方法,来设置线程优先级 ...

  10. 【C++ 语言】线程 ( 线程创建方法 | 线程标识符 | 线程属性 | 线程属性初始化 | 线程属性销毁 | 分离线程 | 线程调度策略 | 线程优先级 | 线程等待 )

    文章目录 I 线程创建方法 II 线程执行函数 III 线程标识符 IV 线程属性 V 线程属性 1 ( 分离线程 | 非分离线程 ) VI 线程属性 2 ( 线程调度策略 ) VII 线程属性 3 ...

最新文章

  1. 【windows】cmd中的help无法使用的解决方法
  2. eclipse中报错:java.lang.OutOfMemoryError: Java heap space
  3. jni java c++ 参数传递问题解决
  4. 属性被分为八大类不包括_乙肝病毒携带者分为几类?主要有5类,包括乙肝表面抗原阳性患者...
  5. html5做文字颜色渐变代码,神奇!js+CSS+DIV实现文字颜色渐变效果_javascript技巧
  6. ffmpeg最新源代码(定期更新)
  7. Python 刷题常用语法与数据结构汇总-2022.01.30
  8. 三维坐标系带偏航角俯仰角_浅谈三维旋转的三种方法及差异
  9. iOS10 的适配问题,你遇到了吗?导航栏标题和返回按钮神奇的消失了
  10. 12_统计学习方法总结
  11. python重新启动整个脚本_每次对脚本进行更改时,都需要在终端中重新启动python...
  12. 如何在Ubuntu 16.04上安装和配置GitLab
  13. swc反编译工具_ffdec 10.0|ffdec(flash反编译工具)下载v10.0.0官方最新版 - 欧普软件下载...
  14. 草根站长胖子讲述做站故事
  15. 闪信霸屏短信USSD是什么?
  16. 计算机一级字幕设置,如何开启电脑哔哩哔哩中的CC字幕功能
  17. 全球各大网站的服务器使用什么操作系统和WEB服务器(转)
  18. 一次微信小程序的问题跟踪记录
  19. java租车_Java 哒哒租车系统(控制台)
  20. 删除Mac中的Windows启动项

热门文章

  1. 统计学中p值计算公式_统计学中P值的计算!
  2. html单元格溢出,excel如何超出单元格显示
  3. 单击选定单元格后输入新内容_excel表格,要双击选定后才能输入,单击不能输入为什么...
  4. 2019年国内开源镜像站点汇总(已更新,之前的好多不能使用的)
  5. 【AndroidStudio】手机QQ登录界面2022版
  6. lsb算法 matlab隐藏图片算法,数字图像加密算法之空域LSB
  7. 计算机录制视频的方法,怎么录制电脑屏幕视频步骤(电脑录屏的方法有4种)...
  8. Achain迎来众多合作伙伴 共建社区生态发展
  9. css层叠实例,css 层叠与z-index的示例代码
  10. 「精品」无损批量压缩图片工具 - Caesium Image Compressor