线程优先级相关函数

打印 上一主题 下一主题

主题 1676|帖子 1676|积分 5028

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
任务优先级

Linux系统中任务优先级分为两种:一种是静态优先级,一种是动态优先级

  • 静态优先级指的是任务一旦设置好优先级之后就不能再改变,相当于是任务本身的属性,优先级范围是0~99,优先级数值越大则优先级越高。
  • 平凡任务的优先级是0,系统任务的优先级是1~99
pthread_attr_setinheritsched函数

此函数可以设置线程的继承调度属性
  1. int pthread_attr_setinheritsched(pthread_attr_t *attr, int inheritsched);
  2. //attr:指向 pthread_attr_t 类型的指针,表示线程属性结构
  3. //inheritsched:指定线程的调度策略继承方式
  4. //PTHREAD_INHERIT_SCHED:新线程继承父线程的调度策略和参数
  5. //PTHREAD_EXPLICIT_SCHED:新线程使用显式指定的调度策略和参数
  6. //ret:成功返回 0,失败返回错误码
复制代码
pthread_attr_getinheritsched函数

此函数可以获取线程的继承调度属性
  1. int pthread_attr_getinheritsched(const pthread_attr_t *attr, int *inheritsched);
  2. //attr:指向 pthread_attr_t 类型的指针,表示线程属性结构
  3. //inheritsched:指定线程的调度策略继承方式
  4. //ret:成功返回 0,失败返回错误码
复制代码
notice:一条线程如果以默认的属性进行创建,则该线程的调度策略被设置为SCHED_OTHER,并且线程的优先级默认设置为0,意味着创建的线程属于平凡任务。
线程的调度策略

Linux系统中线程的调度策略分三种:SCHED_OTHER、SCHED_FIFO、SCHED_RR

  • SCHED_OTHER调度策略指的是分时调度策略
    注意:如果一个线程以SCHED_OTHER调度策略进行创建,线程的静态优先级必须设置为0。
  • SCHED_FIFO调度策略指的是及时调度策略,采用“先到先服务”的调度方式,当一条线程采用该调度策略则会一直运行,直到它被更高优先级的线程抢占或者主动放弃CPU,才会交出控制权。
  • SCHED_RR指的是及时调度策略,是一种基于时间片轮转的调度策略,它会给每个线程设置一个固定的优先级,并按照优先级次序对线程进行轮流调度。
pthread_attr_setschedpolicy函数

此函数可以设置线程的调度属性
  1. int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);
  2. //attr:指向 pthread_attr_t 类型的指针,表示线程属性结构
  3. //policy:线程的调度策略
  4. //ret:成功返回 0,失败返回错误码
复制代码
pthread_attr_getschedpolicy函数

此函数可以获取线程的调度属性
  1. int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy);
  2. //attr:指向 pthread_attr_t 类型的指针,表示线程属性结构
  3. //policy:线程的调度策略
  4. //ret:成功返回 0,失败返回错误码
复制代码
pthread_attr_setschedparam函数

该函数可以设置线程的优先级
  1. struct sched_param {
  2.     int sched_priority; // 线程的优先级
  3. };
  4. int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param);
  5. //attr:指向 pthread_attr_t 类型的指针,表示线程属性结构
  6. //param:struct sched_param 类型的指针,表示线程的调度参数
  7. //ret:成功返回 0,失败返回错误码
  8. //notice:如果线程的调度策略是SCHED_OTHER,则线程的优先级必须设置为0,用于表示普通任务
复制代码
pthread_attr_setschedparam函数

该函数可以获取线程的优先级
  1. int pthread_attr_getschedparam(const pthread_attr_t *attr, struct sched_param *param);
  2. //attr:指向 pthread_attr_t 类型的指针,表示线程属性结构
  3. //param:struct sched_param 类型的指针,表示线程的调度参数
  4. //ret:成功返回 0,失败返回错误码
复制代码
动态优先级

动态优先级指的是当多个平凡任务并发运行时,系统会根据其实际运行的体现来动态地调整他们的nice值
注意:Linux系统中线程的nice值越高,则优先级越低,而nice值越低,反而优先级越高,nice的范围为 -20 ~ 19
  1. int nice(int incr);
  2. //incr:要调整的优先级增量
  3. //ret:成功返回调整后的nice值,失败返回错误码
复制代码
线程信号响应

当一个进程收到信号之后,进程中的哪个线程响应此信号是不确定的
pthread_kill函数

该函数可以向指定的线程发送信号
  1. int pthread_kill(pthread_t thread, int sig);
  2. //thread:指定要发送信号的线程的ID
  3. //sig:指定要发送的信号 SIGTERM:终止线程 SIGINT:中断线程等
  4. //ret:成功返回 0,失败返回错误码
复制代码
pthread_sigqueue函数

此函数可以给某个线程发送信号并发送一个额外的数据
  1. union sigval {
  2.     int sival_int;    // 整数值
  3.     void *sival_ptr;  // 指针值
  4. };
  5. int pthread_sigqueue(pthread_t thread, int sig, const union sigval value);
  6. //thread:指定要发送信号的线程的ID
  7. //sig:指定要发送的信号 SIGTERM:终止线程 SIGINT:中断线程等
  8. //value:指定要传递给线程的值
  9. //ret:成功返回 0,失败返回错误码
复制代码
sigprocmask函数

该函数可以对某个信号进行屏蔽
  1. int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
  2. //how:修改信号掩码
  3. //SIG_BLOCK:将 set 中的信号添加到当前信号掩码中,阻塞这些信号。
  4. //SIG_UNBLOCK:从当前信号掩码中移除 set 中的信号,解除这些信号的阻塞。
  5. //SIG_SETMASK:将当前信号掩码设置为 set 中的值,直接替换当前信号掩码。
  6. //set:信号集合
  7. //oldset:填NULL即可
复制代码
[code][/code]
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

锦通

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表