#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
void *a1(void *arg)
{
char *msg = (char *)arg;//把参数解出来,需要什么类型,按情况解参数
while(1)
{
fprintf(stderr, "%c", *msg);
}
}
//分离与接合
int main()
{
//定义一个线程号tid
pthread_t tid1;
pthread_t tid2;
//准备一个静态优先级的结构体,对其成员赋值代表静态优先级的值
//创建属性变量
pthread_attr_t attr1;
pthread_attr_t attr2;
//不继承调度策略,使用attr自己设置调度策略
pthread_attr_setinheritsched(&attr1,PTHREAD_EXPLICIT_SCHED);
pthread_attr_setinheritsched(&attr2,PTHREAD_EXPLICIT_SCHED);
//将态优先级为1的线程的调度策略设置为RR给attr属性变量
errno = pthread_attr_setschedpolicy(&attr1, SCHED_RR);
if(errno != 0)
{
printf("set policy failed:%s\n",strerror(errno));
return -1;
}
//将态优先级为1的线程的调度策略设置为FIFO给attr属性变量
errno = pthread_attr_setschedpolicy(&attr2, SCHED_FIFO);
if(errno != 0)
{
printf("set policy failed:%s\n",strerror(errno));
return -1;
}
struct sched_param loser;
loser.sched_priority = 1;
//将静态优先级的数值设置给该属性变量
errno = pthread_attr_setschedparam(&attr1,&loser);//改变静态优先级必须以管理员身份
if(errno != 0)
{
printf("set sched failed:%s\n",strerror(errno));
return -1;
}
loser.sched_priority = 50;
errno = pthread_attr_setschedparam(&attr2,&loser);//改变静态优先级必须以管理员身份
if(errno != 0)
{
printf("set sched failed:%s\n",strerror(errno));
return -1;
}
pthread_create(&tid1, &attr1, a1, "A");//attr设置静态优先级为1,调度策略为RR
pthread_create(&tid2, &attr2, a1, "B");//attr设置静态优先级为1,调度策略为RR
pause();
}
写出一个由POSIX有名信号量管理的共享内存程序,该程序执行0123456789每次只取一位数写入共享内存空间,不做打印,并捕获信号SIGINT,一旦该信号产生,自动删除共享内存相关文件并退出。
最新推荐文章于 2024-11-07 14:13:13 发布