时间:2025-05-12 20:34
人气:
作者:admin
Linux系统中任务优先级分为两种:一种是静态优先级,一种是动态优先级
此函数可以设置线程的继承调度属性
int pthread_attr_setinheritsched(pthread_attr_t *attr, int inheritsched);
//attr:指向 pthread_attr_t 类型的指针,表示线程属性结构
//inheritsched:指定线程的调度策略继承方式
//PTHREAD_INHERIT_SCHED:新线程继承父线程的调度策略和参数
//PTHREAD_EXPLICIT_SCHED:新线程使用显式指定的调度策略和参数
//ret:成功返回 0,失败返回错误码
此函数可以获取线程的继承调度属性
int pthread_attr_getinheritsched(const pthread_attr_t *attr, int *inheritsched);
//attr:指向 pthread_attr_t 类型的指针,表示线程属性结构
//inheritsched:指定线程的调度策略继承方式
//ret:成功返回 0,失败返回错误码
notice:一条线程如果以默认的属性进行创建,则该线程的调度策略被设置为SCHED_OTHER,并且线程的优先级默认设置为0,意味着创建的线程属于普通任务。
Linux系统中线程的调度策略分三种:SCHED_OTHER、SCHED_FIFO、SCHED_RR
此函数可以设置线程的调度属性
int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);
//attr:指向 pthread_attr_t 类型的指针,表示线程属性结构
//policy:线程的调度策略
//ret:成功返回 0,失败返回错误码
此函数可以获取线程的调度属性
int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy);
//attr:指向 pthread_attr_t 类型的指针,表示线程属性结构
//policy:线程的调度策略
//ret:成功返回 0,失败返回错误码
该函数可以设置线程的优先级
struct sched_param {
int sched_priority; // 线程的优先级
};
int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param);
//attr:指向 pthread_attr_t 类型的指针,表示线程属性结构
//param:struct sched_param 类型的指针,表示线程的调度参数
//ret:成功返回 0,失败返回错误码
//notice:如果线程的调度策略是SCHED_OTHER,则线程的优先级必须设置为0,用于表示普通任务
该函数可以获取线程的优先级
int pthread_attr_getschedparam(const pthread_attr_t *attr, struct sched_param *param);
//attr:指向 pthread_attr_t 类型的指针,表示线程属性结构
//param:struct sched_param 类型的指针,表示线程的调度参数
//ret:成功返回 0,失败返回错误码
动态优先级指的是当多个普通任务并发运行时,系统会根据其实际运行的表现来动态地调整他们的nice值
注意:Linux系统中线程的nice值越高,则优先级越低,而nice值越低,反而优先级越高,nice的范围为 -20 ~ 19
int nice(int incr);
//incr:要调整的优先级增量
//ret:成功返回调整后的nice值,失败返回错误码
当一个进程收到信号之后,进程中的哪个线程响应此信号是不确定的
该函数可以向指定的线程发送信号
int pthread_kill(pthread_t thread, int sig);
//thread:指定要发送信号的线程的ID
//sig:指定要发送的信号 SIGTERM:终止线程 SIGINT:中断线程等
//ret:成功返回 0,失败返回错误码
此函数可以给某个线程发送信号并发送一个额外的数据
union sigval {
int sival_int; // 整数值
void *sival_ptr; // 指针值
};
int pthread_sigqueue(pthread_t thread, int sig, const union sigval value);
//thread:指定要发送信号的线程的ID
//sig:指定要发送的信号 SIGTERM:终止线程 SIGINT:中断线程等
//value:指定要传递给线程的值
//ret:成功返回 0,失败返回错误码
该函数可以对某个信号进行屏蔽
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
//how:修改信号掩码
//SIG_BLOCK:将 set 中的信号添加到当前信号掩码中,阻塞这些信号。
//SIG_UNBLOCK:从当前信号掩码中移除 set 中的信号,解除这些信号的阻塞。
//SIG_SETMASK:将当前信号掩码设置为 set 中的值,直接替换当前信号掩码。
//set:信号集合
//oldset:填NULL即可
上一篇:线程相关函数-信号量
下一篇:C语言做题知识点总结