操作系统的一道题

如图所示,系统中有三个进程GET、PRO和PUT,共用两个缓冲区BUF1和BUF2。假设BUF1中最多可放11个信息,现已放入了两个信息;BUF2最多可放5个信息。GET进程负责不断地将输入信息送入BUF1中,PRO进程负责从BUF1中取出信息进行处理,并将处理结果送到BUF2中,PUT进程负责从BUF2中读取结果并输出。试写出正确实现GET、PRO、PUT的同步与互斥的算法(要求:(1)用类C语言描述,条理清楚,注释恰当;(2)信号量原语统一使用wait和signal。)
在这里插入图片描述

empty1=9;//表示空的buf1的数目 
empty2=5;//表示空的buf2的数目 
full1=2;//表示buf1满的数目 
full2=0;//表示buf2满的数目 
mutex1=mutex2=1;//互斥信号源 

Main()
{
	cobegin//并发开始 
		CET();
		PRO();
		PUT();
	coend//并发结束	
 } 
 
 //CET进程 
 void CET()
 {
 	while(1)
 	{
 		..........
		  
 		wait(empty1);
 		wait(mutex1);
 		//把信息放进buf1中
		 signal(mutex1);
		 signal(full1); 
		 ........
	 }
  } 
  
  //PRO进程
  void PRO()
  {
  	while(1)
  	{
  		wait(full1);
  		wait(mutex1);
  		//把信息从buf1中取出
		signal(mutex1);
		signal(empty1);
		
		wait(empty2);
		wait(mutex2);
		//把信息放进buf2中
		signal(mutex2);
		signal(full2); 
			
	  }
   } 
   //PUT进程
   void PUT()
   {
   	while(1)
   	{
   		wait(full2);
   		wait(mutex2);
   		//把信息从buf2中取出
   		signal(mutex2);
   		signal(empty2);
	   }
	} 
  • 46
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值