设置线程优先级的函数:

int pthread_setschedparam(pthread_t target_thread, int policy, const struct sched_param *param)

它主要用于设置线程的调用策略和优先级。

参数说明:

1.  target_thread是使用pthread_create所获得的线程ID。
2. 线程的调度有三种策略:SCHED_OTHER、SCHED_RR和SCHED_FIFO。
Policy用于指明使用哪种策略。下面我们简单的说明一下这三种调度策略。
SCHED_OTHER
它是默认的线程分时调度策略,所有的线程的优先级别都是0,线程的调度是通过分时来完成的。简单地说,如果系统使用这种调度策略,程序将无法设置线程的优先级。请注意,这种调度策略也是抢占式的,当高优先级的线程准备运行的时候,当前线程将被抢占并进入等待队列。这种调度策略仅仅决定线程在可运行线程队列中的具有相同优先级的线程的运行次序。
SCHED_FIFO
它是一种实时的先进先出调用策略,且只能在超级用户下运行。这种调用策略仅仅被使用于优先级大于0的线程。它意味着,使用SCHED_FIFO的可运行线程将一直抢占使用SCHED_OTHER的运行线程J。此外SCHED_FIFO是一个非分时的简单调度策略,当一个线程变成可运行状态,它将被追加到对应优先级队列的尾部((POSIX 1003.1)。当所有高优先级的线程终止或者阻塞时,它将被运行。对于相同优先级别的线程,按照简单的先进先运行的规则运行。我们考虑一种很坏的情况,如果有若干相同优先级的线程等待执行,然而最早执行的线程无终止或者阻塞动作,那么其他线程是无法执行的,除非当前线程调用如pthread_yield之类的函数,所以在使用SCHED_FIFO的时候要小心处理相同级别线程的动作。
SCHED_RR
鉴于SCHED_FIFO调度策略的一些缺点,SCHED_RR对SCHED_FIFO做出了一些增强功能。从实质上看,它还是SCHED_FIFO调用策略。它使用最大运行时间来限制当前进程的运行,当运行时间大于等于最大运行时间的时候,当前线程将被切换并放置于相同优先级队列的最后。这样做的好处是其他具有相同级别的线程能在“自私“线程下执行。
3.param是struct sched_param类型的指针,它仅仅包含一个成员变sched_priority,指明所要设置的静态线程优先级。
设置线程优先级的代码例子:
#ifdef HAVE_SCHED_H
#include <sched.h>
#endifvoid setCurrentThreadHighPriority(bool value) {// Start out with a standard, low-priority setup for the sched params.struct sched_param sp;bzero((void*)&sp, sizeof(sp));int policy = SCHED_OTHER;// If desired, set up high-priority sched params structure.if (value) {// FIFO scheduler, ranked above default SCHED_OTHER queuepolicy = SCHED_FIFO;// The priority only compares us to other SCHED_FIFO threads, so we// just pick a random priority halfway between min & max.const int priority = (sched_get_priority_max(policy) + sched_get_priority_min(policy)) / 2;sp.sched_priority = priority;}// Actually set the sched params for the current thread.if (0 == pthread_setschedparam(pthread_self(), policy, &sp)) {printf("IO Thread #%d using high-priority scheduler!", pthread_self());}
}

  

描述来自:https://baike.baidu.com/item/pthread_setschedparam/7033773

转载于:https://www.cnblogs.com/voipman/p/7520965.html

Linux-pthread如何设置线程的优先级相关推荐

  1. unix设置线程优先级-转

    如何在linux/unix中设置线程的优先级 int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*sta ...

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

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

  3. Java多线程——线程的优先级和生命周期

    Java多线程--线程的优先级和生命周期 摘要:本文主要介绍了线程的优先级以及线程有哪些生命周期. 部分内容来自以下博客: https://www.cnblogs.com/sunddenly/p/41 ...

  4. linux多线程学习设置线程调度权限

    pthread_setschedparam 设置线程的权限 int pthread_setschedparam(pthread_t target_thread, int policy, const s ...

  5. java 多线程4: java线程的优先级

    Java线程的优先级取值范围是1 (Thread.MIN_PRIORITY ) 到 10 (Thread.MAX_PRIORITY ).如果没有设置, 线程默认的优先级是NORM_PRIORITY.这 ...

  6. 线程状态,优先级,守护线程基础详解

    线程状态,优先级,守护线程基础详解 线程状态 停止线程 线程休眠 线程礼让 线程强制执行 线程状态检测 线程的优先级 守护线程 线程同步 线程状态 创建状态(new 之后就是创建状态 就绪状态(调用s ...

  7. 线程的优先级、等待线程、守护线程

    线程的优先级.等待线程.守护线程 我们可以通过 public final void setPriority(int newPriority) 来设置线程的优先级,但是优先级并不是绝对的,只是相对来说比 ...

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

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

  9. linux多线程学习(三)——线程属性设置

    在上一篇文章中,介绍了线程的创建和退出,以及相关函数的使用.其中pthread_create函数的第二个参数,是关于线程属性的设置,这也是今天所有讲述的.这些属性主要包括邦定属性.分离属性.堆栈地址. ...

最新文章

  1. 蜗杆单轨滑轨的驱动的统一接口
  2. [linux] tcpdump抓包案例
  3. Apache ECharts各种图表页面展示
  4. gpu超算算法_科学网—GPU“虎山”探未来
  5. Centos7jdk安装
  6. 小猴吃桃matlab,看图写话:小猴吃桃精彩选篇
  7. 3个月的SHELLCODE研究成果-一个最简单的Shellcode
  8. 计算机视觉中的Transformer的最新进展!
  9. Java之PriorityQueue有序队列
  10. 作为刚開始学习的人应该怎样来学习FPGA
  11. 五、bootstrap-fileinput
  12. ace treeview.php,改造 Ace Admin 模板的 ace_tree 组件的 folderSelect 样式
  13. 牛客网Python笔试技巧、单行多行输入方法以及代码调试技巧
  14. 国外开放知识图谱_什么是开放知识,如何传播?
  15. Hola Studio最佳实践之多边形刚体的编辑
  16. 临床医学中的生物信息学
  17. 如何做好IT战略规划与IT咨询!
  18. 前后端分离:vue项目部署服务器操作步骤详细
  19. 原来,我连一个URL都写不对…
  20. String的intern()

热门文章

  1. Python学习笔记(迭代、模块扩展、GUI 、编码处理等)
  2. UIView中常见的方法汇总
  3. Oracle数据库一致性读的原理
  4. 【项目实施随笔】改造一下Dialog
  5. CString 是一种很有用的数据类型
  6. C++_类和对象_C++运算符重载_赋值运算符重载_利用深拷贝实现对象深度赋值运算---C++语言工作笔记058
  7. 大数据之_亿级分布式日志管理ELK_工作笔记001_ELK认识介绍
  8. SVN工作笔记005---TortoiseSVN SendRpt.exe not found解决方案
  9. SpringCloud学习笔记023---分布式集群之_Windows下搭建zookeeper服务器
  10. C#.NET验证码智能识别学习笔记---05C#.Net图片预处理