写出一个由POSIX有名信号量管理的共享内存程序,该程序执行0123456789每次只取一位数写入共享内存空间,不做打印,并捕获信号SIGINT,一旦该信号产生,自动删除共享内存相关文件并退出。

#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();
	
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值