2014.9作业1答案

2014.9作业1答案

ID:37969850

大小:74.91 KB

页数:4页

时间:2019-06-04

2014.9作业1答案_第1页
2014.9作业1答案_第2页
2014.9作业1答案_第3页
2014.9作业1答案_第4页
资源描述:

《2014.9作业1答案》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1.1.桌上有一空盘,允许存放一只水果。爸爸向盘中放苹果,妈妈向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、妈妈、儿子、女儿四个并发进程的同步。1.找出进程的数量及其关系(同步互斥)2.设置信号量(含义和初值)3.描述每一个进程IntSp=1IntSapple=0IntSorange=0voidprocess母亲(){P(Sp)SP=-1放桔子在盘子V(Sorange)}voidprocess父亲(){P(Sp)SP=0放苹果在盘子V

2、(Sapple)Sapple=1}Voidprocess女儿(){P(Sapple)从盘子拿苹果V(Sp)吃苹果}Voidprocessson(){P(Sorange)从盘子拿桔子V(Sp)吃桔子}2.有三个进程A1,A2,A3,它们共享两个缓冲区B1和B2,缓冲区B1中可存放n件产品,缓冲区B2中可存放m件产品,进程A1每次生产一件产品,并把产品放入缓冲区B1中,进程A2每次从缓冲区B1中取出一件产品,再把该产品送到缓冲区B2中,进程A3每次从缓冲区B2中取出一件产品进行消费。为了防止把产品存入已满的缓冲区,

3、或从空缓冲区中取产品,或重复取同一产品,用PV操作实现它们之间的相互制约。应该设置S1,S2,S3,S4四个信号量,S1,S2表示缓冲区B1中的可存产品和可供消费的产品。S3,S4表示缓冲区B2中的可存产品和可供消费的产品数目。设置B1B2的互斥信号量MUTEX1=1,MUTEX2=1同时为了正确的存产品和取产品,可用两队指针R1,T1和R2,T2指出当前存放的位置。程序如下:A1,B1,A2A2,B2,A33.设在公共汽车上,司机和售票员的活动分别是:司机:启动车辆,正常行车,到站停车。售票员:上乘客,关车门

4、,售票,开车门,下乘客。用PV操作对其控制。现在我们表述:司机进程设置一个私有信号量run,用于判断司机能否进行工作,初值为0。售票员进程设置一个私有信号量stop,用于判断是否停车,售票员是否能够开车门,初值为0。beginstop,run:semaphore  stop:=0;run:=0;  cobeginconductor:begin   L2:上乘客;    关车门;    V(run);    售票;    P(stop);    开车门;    下乘客;    gotoL2;   end;   c

5、oend;  end;   driver:begin   L1:P(run);    启动车辆;    正常行车;    到站停车;    V(stop);    goto L1;   end;  4.睡眠理发师问题:理发店里有一位理发师、一把理发椅和n把供等候理发的顾客坐的椅子。如果没有顾客,理发师便在理发椅上睡觉;当一个顾客到来时,它必须叫醒理发师;如果理发师正在理发时又有顾客来到,那么,如果有空椅子可坐,顾客就坐下来等待,否则就离开理发店。我们的解法使用三个信号量:customers,用来记录等候理发的顾

6、客数(不包括正在理发的顾客);barbers,记录正在等候顾客的理发师数,为0或1;mutex,用于互斥。我们还需要一个变量waiting,它也用于记录等候的顾客数,实际上是customers的一份拷贝。之所以使用waiting是因为无法读取信号量的当前值。在该解法中,进入理发店的顾客必须先看等候的顾客数,如果少于椅子数,他留下来等,否则他就离开。#defineCHAIRS5typedefintsemaphone;/*运用你的想象力*/semaphorecustomers=0;/*等待服务的顾客数*/semap

7、horebarbers=0;/*等待顾客的理发师数*/semaphoremutex=1;/*用于互斥*/intwaiting=0;/*等待的顾客(还没理发的)*/voidbarber(){while(1){P(customers);//如果没有顾客,则理发师打瞌睡,阻塞进程P(mutex);//互斥进入临界区,欲修改waitingwaiting--;//等待理发人数减1V(barbers);//理发师开始理发V(mutex);//退出临界区,完成对waiting的修改cut_hair();//理发(在临界区之外

8、)}}voidcustomer(){P(mutex);//互斥进入临界区,欲修改waitingif(waiting﹤CHAIRS)//如果没有空的椅子就离开{waiting++;//等待理发的人数加1V(customers);//等待理发的人数加1。若有必要,唤醒理发师V(mutex);//退出临界区,完成对waiting的修改P(barbers);//理发师是否空闲,若忙则阻塞get

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。