线程优先级相关函数
任务优先级Linux系统中任务优先级分为两种:一种是静态优先级,一种是动态优先级
[*]静态优先级指的是任务一旦设置好优先级之后就不能再改变,相当于是任务本身的属性,优先级范围是0~99,优先级数值越大则优先级越高。
[*]普通任务的优先级是0,系统任务的优先级是1~99
pthread_attr_setinheritsched函数
此函数可以设置线程的继承调度属性
int pthread_attr_setinheritsched(pthread_attr_t *attr, int inheritsched);
//attr:指向 pthread_attr_t 类型的指针,表示线程属性结构
//inheritsched:指定线程的调度策略继承方式
//PTHREAD_INHERIT_SCHED:新线程继承父线程的调度策略和参数
//PTHREAD_EXPLICIT_SCHED:新线程使用显式指定的调度策略和参数
//ret:成功返回 0,失败返回错误码pthread_attr_getinheritsched函数
此函数可以获取线程的继承调度属性
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
[*]SCHED_OTHER调度策略指的是分时调度策略
注意:如果一个线程以SCHED_OTHER调度策略进行创建,线程的静态优先级必须设置为0。
[*]SCHED_FIFO调度策略指的是实时调度策略,采用“先到先服务”的调度方式,当一条线程采用该调度策略则会一直运行,直到它被更高优先级的线程抢占或者主动放弃CPU,才会交出控制权。
[*]SCHED_RR指的是实时调度策略,是一种基于时间片轮转的调度策略,它会给每个线程设置一个固定的优先级,并按照优先级顺序对线程进行轮流调度。
pthread_attr_setschedpolicy函数
此函数可以设置线程的调度属性
int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);
//attr:指向 pthread_attr_t 类型的指针,表示线程属性结构
//policy:线程的调度策略
//ret:成功返回 0,失败返回错误码pthread_attr_getschedpolicy函数
此函数可以获取线程的调度属性
int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy);
//attr:指向 pthread_attr_t 类型的指针,表示线程属性结构
//policy:线程的调度策略
//ret:成功返回 0,失败返回错误码pthread_attr_setschedparam函数
该函数可以设置线程的优先级
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,用于表示普通任务pthread_attr_setschedparam函数
该函数可以获取线程的优先级
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值,失败返回错误码线程信号响应
当一个进程收到信号之后,进程中的哪个线程响应此信号是不确定的
pthread_kill函数
该函数可以向指定的线程发送信号
int pthread_kill(pthread_t thread, int sig);
//thread:指定要发送信号的线程的ID
//sig:指定要发送的信号 SIGTERM:终止线程 SIGINT:中断线程等
//ret:成功返回 0,失败返回错误码pthread_sigqueue函数
此函数可以给某个线程发送信号并发送一个额外的数据
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,失败返回错误码sigprocmask函数
该函数可以对某个信号进行屏蔽
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
//how:修改信号掩码
//SIG_BLOCK:将 set 中的信号添加到当前信号掩码中,阻塞这些信号。
//SIG_UNBLOCK:从当前信号掩码中移除 set 中的信号,解除这些信号的阻塞。
//SIG_SETMASK:将当前信号掩码设置为 set 中的值,直接替换当前信号掩码。
//set:信号集合
//oldset:填NULL即可
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]