更多资料请点击:我的目录
本篇仅用于记录自己所学知识及应用,代码仍可优化,仅供参考,如果发现有错误的地方,尽管留言于我,谢谢。
设置静态优先级的函数
pthread_attr_setschedparam(pthread_attr_t *attr , const struct sched_param *param);
第二个参数为如下的结构体:
struct sched_param
{
int sched_priority; //通过给它赋值,设置静态优先级的数值大小
};
具体代码如下:(编译运行时记得先切换为超级用户 sudo -s)
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
void *task1()
{
while(1)
{
printf("我是线程1\n");
sleep(1);
}
}
void *task2()
{
while(1)
{
printf("我是线程2\n");
sleep(1);
}
}
int main()
{
pthread_attr_t myarrt; //定义属性变量
pthread_attr_init(&myarrt); //初始化
pthread_attr_setinheritsched(&myarrt,PTHREAD_EXPLICIT_SCHED); //设置使用属性变量的调度策略
pthread_attr_setschedpolicy(&myarrt,SCHED_FIFO); //设置线程的调度策略
struct sched_param schedp; //定义静态优先级的结构体
schedp.sched_priority = 55; //赋值,数值越大,优先级越高
pthread_attr_setschedparam(&myarrt,&schedp); //设置线程的静态优先级
pthread_t id1;
pthread_create(&id1, &myarrt, task1, NULL); //创建子线程1
schedp.sched_priority = 33; //赋值,数值越大,优先级越高
pthread_attr_setschedparam(&myarrt,&schedp);
pthread_t id2;
pthread_create(&id2, &myarrt, task2, NULL); //创建子线程1
pthread_join(id1,NULL); //等待回收子线程1
pthread_join(id2,NULL); //等待回收子线程2
pthread_attr_destroy(&myarrt); //销毁属性变量
}