操作系统课程设计吃水果问题完整
吃水果问题

实习一进程同步
一、实习内容
模拟进程同步。
二、实习目的
本实习要求学生理解进程同步的概念和进程同步技术——信号量机制。
三、实习题目
编写一个程序,模拟“吃水果问题”。
问题描述:桌上有一个盘子,每次只能放一个水果,爸爸专向盘中放苹果,妈妈专向盘中放橘子,儿子专等吃盘里的橘子,女儿专等吃盘里的苹果。
只要盘子空,爸爸妈妈可向盘中放水果,仅当盘中有自己需要的水果时,儿子或女儿可从中取出,请用信号量及PV操作模拟四人的同步关系。
提示:
(1)信号量和P、V(semwait&semsignal)操作原语自己定义,在保证该对原语原有意义的基础上,也可添加新内容(模拟的需要,结合提示(5)思考);
(2)4人分别是4个进程,每个进程的程序可由一个函数模拟;
其中,
进程名——作为进程的标识,自己定义。
状态——有两种状态,“就绪”和“阻塞”,初始状态都为“就绪”,用“R”表示。
当一个进程阻塞后,它的状态为“阻塞”,用“B”表示。
(3)当前执行哪个进程可由随机函数决定,若该进程当前是阻塞的,则打印“该进程阻塞”提示;否则,执行该进程程序;
(4)取、放水果的操作可用打印语句的方式替代;
(5)当一个阻塞态进程被唤醒成为就绪态,然后,再次被选中执行时,应从P原语的下一个语句开始执行。
这该怎么控制?想办法解决(结合提示(1)思考)。
注意:
信号量的设置和初值;
程序应有提示,界面友好!
用循环队列存阻塞队列和就绪队列。
进程同步模拟设计--吃水果问题

附件1:学号:012课程设计题目进程同步模拟设计--吃水果问题学院计算机科学与技术学院专业计算机科学与技术专业班级计算机姓名指导教师2011 年01 月19 日课程设计任务书学生:专业班级:指导教师:作单位:计算机科学与技术学院题目: 进程同步模拟设计——吃水果问题初始条件:1.预备容:阅读操作系统的进程管理章节容,对进程的同步和互斥,以及信号量机制度有深入的理解。
2.实践准备:掌握一种计算机高级语言的使用。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.模拟吃水果的同步模型:桌子上有一只盘子,最多可容纳两个水果,每次只能放入或者取出一个水果。
爸爸专门向盘子中放苹果,妈妈专门向盘子中放橘子,两个儿子专门等待吃盘子中的橘子,两个女儿专门等吃盘子中的苹果。
2.设计报告容应说明:⑴需求分析;⑵功能设计(数据结构及模块说明);⑶开发平台及源程序的主要部分;⑷测试用例,运行结果与运行情况分析;⑸自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);iv)完成本题是否有其他方法(如果有,简要说明该方法);v)对实验题的评价和改进意见,请你推荐设计题目。
时间安排:设计安排一周:周1、周2:完成程序分析及设计。
周2、周3:完成程序调试及测试。
周4、周5:验收、撰写课程设计报告。
(注意事项:严禁抄袭,一旦发现,一律按0分记)指导教师签名:年月日系主任(或责任教师)签名:年月日进程同步模拟设计——吃水果问题1需求分析1.1吃水果问题的描述桌子上有一只盘子,最多可容纳两个水果,每次只能放入或者取出一个水果。
爸爸专门向盘子中放苹果,妈妈专门向盘子中放橘子,两个儿子专门等待吃盘子中的橘子,两个女儿专门等吃盘子中的苹果。
1.2问题的转换这是进程同步问题的模拟,可以把向盘子放或取水果的每一个过程可以转为一个进程的操作,这些进程是互斥的,同时也存在一定的同步关系。
进程同步模型系统的设计—吃水果

课程设计课程设计任务书学生: Miss屠专业班级: 08计科指导教师:王海英工作单位:计算机科学与技术学院题目: 进程同步模型系统的设计——吃水果问题初始条件:1.预备容:阅读操作系统的进程管理章节容,对进程的同步和互斥,以及信号量机制度有深入的理解。
2.实践准备:掌握一种计算机高级语言的使用。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.为下面吃水果的问题创建进程并利用通信API实现进程之间的同步模型。
能够处理以下的情形:桌子上有一只盘子,最多可容纳两个水果,每次只能放入或者取出一个水果。
爸爸专门向盘子中放苹果,妈妈专门向盘子中放橘子,两个儿子专门等待吃盘子中的橘子,两个女儿专门等吃盘子中的苹果。
2.设计报告容应说明:⑴课程设计目的与功能;⑵需求分析,数据结构或模块说明(功能与框图);⑶源程序的主要部分;⑷运行结果与运行情况分析;⑸自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);iv)完成本题是否有其他的其他方法(如果有,简要说明该方法);时间安排:设计安排一周:周1、周2:完成程序分析及设计。
周2、周3:完成程序调试及测试。
周4、周5:撰写课程设计报告。
指导教师签名:年月日系主任(或责任教师)签名:年月日进程同步模型系统的设计——吃水果问题1、课程设计目的与功能1.1、目的为下面吃水果的问题创建进程并利用通信API实现进程之间的同步模型。
能够处理以下的情形:桌子上有一只盘子,最多可容纳两个水果,每次只能放入或者取出一个水果。
爸爸专门向盘子中放苹果,妈妈专门向盘子中放橘子,两个儿子专门等待吃盘子中的橘子,两个女儿专门等吃盘子中的苹果。
1.2、实现的功能本程序共创建了4个在windows系统环境下实现的线程,即Fahter、Mother、Son和Daughter等4个线程,以及putapple、putorange、getapple和getorange 等4个函数,其中4个线程是用于实现爸爸、妈妈、儿子和女儿分别放水果和取水果的线程操作的,并分别调用这4个函数,来实现真正的操作。
技工院--苹果-桔子问题的实现

《操作系统》课程设计任务书题目:苹果-桔子问题的实现学生姓名:班级:物联网工程1班学号:指导教师:张清/贾娟娟一、设计目的学生通过该题目的设计过程,掌握进程同步问题的原理、软件开发方法并提高解决实际问题的能力。
二、设计内容1、了解UNIX的命令及使用格式,熟悉UNIX/LINUX的常用基本命令,练习并掌握UNIX提供的vi编辑器来编译C程序,学会利用gcc、gdb编译、调试C程序。
2、编写程序实现苹果-桔子问题。
桌上有一个空盘子,只允许放一个水果。
爸爸专向盘中放苹果,妈妈专向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。
规定当盘空时,一次只能放一个水果。
三、设计要求及工作量1、分析设计要求,给出解决方案(要说明设计实现所用的原理、采用的数据结构)。
2、设计合适的测试用例,对得到的运行结果要有分析。
3、设计中遇到的问题,设计的心得体会。
4、文档:课程设计打印文档每个学生一份,并装在统一的资料袋中。
5、光盘:每个学生的文档和程序资料建在一个以自己学号和姓名命名的文件夹下,刻录一张光盘,装入资料袋中。
四、要提交的成果1. 设计说明书一份,内容包括:1) 中文摘要100字;关键词3-5个;2) 设计思想;3)各模块的伪码算法;4)函数的调用关系图;5)测试结果;6)源程序(带注释);7)设计总结;8) 参考文献、致谢等。
2. 刻制光盘一张。
五、设计进度计划及时间安排六、主要参考资料1.汤子瀛,哲凤屏.《计算机操作系统》.西安电子科技大学学出版社.2.王清,李光明.《计算机操作系统》.冶金工业出版社.3.孙钟秀等. 操作系统教程. 高等教育出版社4.曾明. Linux操作系统应用教程. 陕西科学技术出版社.5. 张丽芬,刘利雄.《操作系统实验教程》. 清华大学出版社.6. 孟静,操作系统教程--原理和实例分析. 高等教育出版社7. 周长林,计算机操作系统教程. 高等教育出版社8. 张尧学,计算机操作系统教程,清华大学出版社9.任满杰,操作系统原理实用教程,电子工业出版社10.张坤.操作系统实验教程,清华大学出版社目录1.绪论 (1)1.1设计任务 (1)1.2设计思想 (1)1.3基础知识 (1)2.各模块伪码算法 (3)2.1父亲进程模块 (3)2.2母亲进程模块 (5)2.3儿子进程模块 (7)2.4女儿进程模块 (9)2.5Print函数 (11)3. 函数调用关系图 (14)3.1函数调用图........................................ 错误!未定义书签。
操作系统-吃水果问题

操作系统-吃水果问题操作系统-吃水果问题1、引言本文档描述了一个操作系统的模拟问题-吃水果问题。
该问题涉及到多个进程同时对有限数量的水果资源进行访问的情况。
我们将介绍该问题的背景、目标和关键概念。
2、背景吃水果问题模拟了现实生活中多个进程同时访问共享资源的情况。
在该问题中,不同的进程可以同时访问一定数量的水果资源。
然而,由于水果资源有限,进程必须遵守特定的规则以确保公平访问。
3、目标该问题的目标是设计一种算法,使得不同的进程能够共享有限的水果资源。
我们的目标是确保进程之间的公平访问,并通过合适的同步机制来避免产生竞争条件和死锁。
4、关键概念4.1 进程(Process)进程是计算机中正在运行的程序的实例。
在吃水果问题中,每个进程代表一个人,这些人需要同时访问共享的水果资源。
4.2 共享资源(Shared Resource)共享资源是多个进程可能同时访问的资源。
在吃水果问题中,水果资源是共享资源,被多个进程同时竞争。
4.3 同步机制(Synchronization Mechanism)同步机制用于控制多个进程对共享资源的访问。
在吃水果问题中,我们需要设计一种同步机制来确保进程之间的公平访问和避免竞争条件。
5、解决方案5.1 问题分析首先,我们需要确定问题的规模和要求。
包括进程数量、水果资源数量以及对公平访问的要求等。
5.2 同步机制设计我们可以采用多种同步机制来解决吃水果问题,例如互斥锁、条件变量等。
在设计同步机制时,需要考虑到公平性、死锁避免和性能等方面的因素。
5.3 算法实现根据设计的同步机制,我们需要实现相应的算法来解决吃水果问题。
这个算法应该能够正确地控制进程对资源的访问,并满足公平访问和避免死锁的要求。
6、测试与调试在实现算法之后,我们需要进行测试和调试来确保算法的正确性和性能。
包括编写测试用例、模拟并发情况和调整参数等。
7、结论通过本文档,我们介绍了操作系统中的吃水果问题,并提供了解决该问题的解决方案。
000操作系统课设报告(进程控制-吃苹果)

在计算机系统中每个进程都可产生某些资源或消耗一定的资源,当其产生资源的时候其就作为生产者,当其消耗资源的时候其就变为消费者。但是这些进程在执行的过程中只能互斥的访问临界区,否则就会产生一些错误。为了避免这种情况的发生,就必须引入一些信号量来控制程序有序的执行。
{
char *addr, end;
int shmid;
int semid_empty, semid_full1,semid_full2, semid_mutex;
struct sembuf sem_tmp;
/*开辟共享存储区*/
if ((shmid = shmget(SHMKEY, BUFF_LEN * PRODUCT_LEN+3, 0777|IPC_CREAT|IPC_EXCL)) == -1)
{
if (errno == EEXIST)
{
printf("The Buffer Has Existed!\n");
printf("Do You Want To Delete The Buffer(Y = yes)?\n====:");
scanf("%c", &end);
if(end == 'y' || end == 'Y')
小结:linux下的命令当然是非常多,以上列出的只是我在这次课程设计中所用到一些命令。此外,在我们在使用过程中遇到一些生僻的命令时,我们可以应用互联网来搜索相应的功能。在知道相关命令,但是忘记具体操作的时候我们还可以通过命令--help的方式来查看该命令的具体操作用法,非常实用。
苹果-桔子问题的实现

《操作系统》课程设计任务书题目:苹果-桔子问题的实现学生姓名:学号:班级:11计算机科学与技术题目类型:软件工程(R)指导教师:一、设计目的学生通过该题目的设计过程,掌握进程同步问题的原理、软件开发方法并提高解决实际问题的能力。
二、设计任务1、了解UNIX的命令及使用格式,熟悉UNIX/LINUX的常用基本命令,练习并掌握UNIX提供的vi编辑器来编译C程序,学会利用gcc、gdb编译、调试C程序。
2、编写程序实现苹果-桔子问题。
桌上有一个空盘子,只允许放一个水果。
爸爸专向盘中放苹果,妈妈专向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。
规定当盘空时,一次只能放一个水果。
三、设计要求1、分析设计要求,给出解决方案(要说明设计实现所用的原理、采用的数据结构)。
2、设计合适的测试用例,对得到的运行结果要有分析。
3、设计中遇到的问题,设计的心得体会。
4、文档:课程设计打印文档每个学生一份,并装在统一的资料袋中。
5、光盘:每个学生的文档和程序资料建在一个以自己学号和姓名命名的文件夹下,刻录一张光盘,装入资料袋中。
四、提交的成果1. 设计说明书一份,内容包括:1) 中文摘要100字;关键词3-5个;2) 设计思想;3)各模块的伪码算法;4)函数的调用关系图;5)测试结果;6)源程序(带注释);7)设计总结;8) 参考文献、致谢等。
2. 刻制光盘一张。
五、主要参考文献1. 汤子瀛,哲凤屏.《计算机操作系统》.西安电子科技大学学出版社.2. 王清,李光明.《计算机操作系统》.冶金工业出版社.3.孙钟秀等. 操作系统教程. 高等教育出版社4.曾明. Linux操作系统应用教程. 陕西科学技术出版社.5. 张丽芬,刘利雄.《操作系统实验教程》. 清华大学出版社.6. 孟静,操作系统教程--原理和实例分析. 高等教育出版社7. 周长林,计算机操作系统教程. 高等教育出版社8. 张尧学,计算机操作系统教程,清华大学出版社9.任满杰,操作系统原理实用教程,电子工业出版社10.张坤.操作系统实验教程,清华大学出版社六、各阶段时间安排(共2周)2013年12月9日。
水果盘问题

山西大学课程实验报告实验课程操作系统实验实验名称操作系统模拟程序设计(4)实验地点自动化与软件学院中心机房实验时间第七周第七节到第八节学生班级学生学号学生姓名指导教师2020 年 10 月 21 日实验题目:水果盘问题桌子上有一只盘子,只能容纳一个水果,每次只能放入或取出一个水果,爸爸专往盘子里放苹果。
妈妈专往盘子里放橘子,儿子专门等待吃盘子中的橘子,女儿专门等待吃盘子中的水果。
设计思路或流程图1.分析是否存在共享数据的问题?水果盘问题存在共享数据,在同一个时刻,只能有一个线程对水果盘中的水果进行操作,爸爸,妈妈放水果(爸爸放苹果,妈妈放橘子),儿子和女儿取水果(儿子取橘子,女儿取实验源程序加注释:package jihe;/*** @author moran* @create 2020-12-02-15:21*/import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/*水果盘问题*/class Plant{private int apple=0;private int orange=0;private int fruit=0;Lock lock = new ReentrantLock(); // 锁对象Condition fmther_lock = lock.newCondition();// 爸妈监视器Condition son_lock = lock.newCondition(); // 儿子监视器Condition daughter_lock = lock.newCondition(); // 女儿监视器public void FatherProcess() {lock.lock();while(fruit==1) {// System.out.println("爸爸线程阻塞");try {fmther_lock.await();} catch (InterruptedException e) {e.printStackTrace();}}while(fruit==0){fruit++;apple++;System.out.println(Thread.currentThread().getName()+":放苹果...");// lock.unlock();daughter_lock.signal();//System.out.println("女儿线程被唤醒....");}lock.unlock();}public void MotherProcess() {lock.lock();while (fruit == 1) {//System.out.println("妈妈线程阻塞");try {fmther_lock.await();//System.out.println("妈妈线程阻塞");} catch (InterruptedException e) {e.printStackTrace();}}while (fruit == 0) {fruit++;orange++;System.out.println(Thread.currentThread().getName() + ":放桔子...");//lock.unlock();son_lock.signal();//System.out.println("儿子线程被唤醒....");}lock.unlock();}public void SonProcess () {lock.lock();while (orange == 0) {// System.out.println("儿子线程阻塞");try {son_lock.await();} catch (InterruptedException e) {e.printStackTrace();}}while (orange==1) {System.out.println(Thread.currentThread().getName() + ":取桔子...");fruit--;orange--;// lock.unlock();fmther_lock.signal();//System.out.println("爸爸妈妈线程被唤醒....");}lock.unlock();}//创建女儿线程public void DaughterProcess() {lock.lock();while (apple == 0) {//当盘中没有苹果// System.out.println("女儿线程阻塞");try {daughter_lock.await();//唤醒女儿监视器,女儿进程阻塞// System.out.println("女儿线程阻塞");} catch (InterruptedException e) {e.printStackTrace();}}//当盘中有苹果while (apple == 1) {System.out.println(Thread.currentThread().getName() + ":取苹果...");fruit--;apple--;fmther_lock.signal();//System.out.println("爸爸妈妈线程被唤醒....");}lock.unlock();}}//用继承Thread的方法处理多线程问题class Father extends Thread{private Plant plant;public Father(Plant plant){this.plant=plant;}@Overridepublic void run() {while(true){//System.out.println(getName()+":开始放苹果");plant.FatherProcess();//调用爸爸线程}}}class Mother extends Thread{private Plant plant;public Mother(Plant plant){this.plant=plant;}@Overridepublic void run() {while(true){System.out.println(getName()+":开始放桔子");plant.MotherProcess();//调用妈妈线程}}}class Son extends Thread{private Plant plant;public Son(Plant plant){this.plant=plant;}public void run() {while(true){System.out.println(getName()+":开始取桔子");plant.SonProcess();//调用儿子线程}}}class Daughter extends Thread{private Plant plant;public Daughter(Plant plant){this.plant=plant;}public void run() {while(true){System.out.println(getName()+":开始取苹果");plant.DaughterProcess();//调用女儿线程}}}public class FruitTest {public static void main(String[] args) {Plant p=new Plant();Father f=new Father(p);Mother m=new Mother(p);Son s=new Son(p);Daughter d=new Daughter(p);f.setName("爸爸");//给线程命名m.setName("妈妈");s.setName("儿子");d.setName("女儿");f.start();//调用start函数开启线程m.start();s.start();d.start();}实验测试结果记录:1.测试结果一2.测试结果二实验成果总结:1.实现了本实验所要求的基本功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
1.1
进程同步模拟设计:吃水果问题
1.2
桌子上有一只盘子,最多可容纳两个水果,每次只能放入或者取出一个水果。爸爸专门向盘子中放苹果,妈妈专门向盘子中放橘子,两个儿子专门等待吃盘子中的橘子,两个女儿专门等吃盘子中的苹果。
1.3
将问题转换为信号量上的资源分配类型问题:
这是进程同步问题的模拟,可以把向盘子放或取水果的每一个过程可以转为一个进程的操作,这些进程是互斥的,同时也存在一定的同步关系。通过编程实践时,实际是随机的调用人一个进程的操作,而这些进程的操作相当于程序中的函数调用。而计算机在执行时每一个时刻只能执行一个操作,这就默认了互斥。同步的模拟可以类似于函数调用时的前提关系即先决条件。这样进程同步模拟就完全可以通过函数的调用来实现。
int MonFa_c;//用于爸爸妈妈等待次序的区别
int Son_a;//用于两个儿子等待次序的区别
int daughter_b;//用于两个女儿等待次序的区别
int k;//产生进程调用的数量
srand((unsigned)time(NULL));//srand()函数产生一个以当前时间开始的随机种子
Son2(); //处于等待的Son2()自动调用
Son_a=1;
}
}
else
{
if(Son1_lag==true)
{
Son1_lag=false; //Son1等待取消
cout<<"处于等待的Son1自动被调用"<<endl;
Son1(); //处于等待的Son源自()自动调用Son_a=0;
}
else if(Son2_lag==true)
{
orange--;
Print();
}
void Daughter1() //Daughter1进程
{
apple--;
Print();
}
void Daughter2() //Daughter2进程
{
apple--;
Print();
}
void main()
{
int i;
int Plate_Size;//水果数量
{
Mother_lag=false;
cout<<"处于等待的Mother自动被调用"<<endl;
Mother();
MonFa_c=0;
}
}
}
break;
case 3:
cout<<" Son2调用."<<endl;
if(orange==0)
{
Son2_lag=true; //Son2处于等待
Print();
{
Father_lag=false;
cout<<"处于等待的Father自动被调用"<<endl;
Father();
MonFa_c=2;
}
else //Father和Mother同时处于等待,但Mother先等待,因此先调用
{
Mother_lag=false;
cout<<"处于等待的Mother自动被调用"<<endl;
Mother();
MonFa_c=1;
}
}
else
{
if(Father_lag==true) //只有Father处于等待,调用
{
Father_lag=false;
cout<<"处于等待的Father自动被调用"<<endl;
Father();
MonFa_c=0;
}
else if(Mother_lag==true)//只有Mother处于等待,调用
具体的每一个操作的对应的函数的关系:
爸爸向盘子中放一个苹果:Father()
妈妈向盘子中放一个橘子:Mother()
儿子1从盘子取一个橘子:Son1()
儿子2从盘子取一个橘子:Son2()
女儿1从盘子取一个苹果:Daugther1()
儿子1从盘子取一个苹果:Daugther2()
具体实现方案:
(1)用一个整型变量Plate_Size表示盘子,初始值为0,当放水果时Plate_Size加1,取水果时Plate_Size减1。变量Plate_Size的最大值为2,当为2时表示盘子已经满,此时若进行放水果操作,放水果将处于等待状态;为0时表示盘子为空,此时若进行取水果操作,取水果操作将处于等待状态。
for(k=0;k<10;k++)
{
cout<<endl;
cout<<"***********************************"<<"第"<<k+1<<"次操作"<<"***********************************"<<endl;
i=rand()%6; //随进生成1-5.
Daughter1(); //处于等待的Daughter1自动调用
Daughter_b=2;
}
else
{
Daughter2_lag=false;//Daughter2等待取消
cout<<"处于等待的Daughter2自动被调用"<<endl;
Daughter2(); //处于等待的Daughter2()自动调用
if(Father_lag==true)
cout<<" Father进程处于等待状态,"<<endl;
if(Mother_lag==true)
cout<<" Mother进程处于等待状态,"<<endl;
if(Son1_lag==true)
cout<<" Son1进程处于等待状态,"<<endl;
if(Son2_lag==true)
}
else
{
Father();
if((Daughter1_lag==true)&&(Daughter2_lag==true))
{
if(Daughter_b==1)
{
Daughter1_lag=false;//Daughter1等待取消
cout<<"处于等待的Daughter1自动被调用"<<endl;
Print();
if(Son2_lag==false)
Son_a=1; //用于判断Son1和Son2等待的先后性
}
else
{
Son1();
if((Father_lag==true)&&(Mother_lag==true))
{
if(MonFa_c==1) //Father和Mother同时处于等待,但Father先等待,因此先调用
{
if(Son_a==1)
{
Son1_lag=false;//Son1等待取消
cout<<"处于等待的Son1自动被调用"<<endl;
Son1(); //处于等待的Son1()自动调用
Son_a=2;
}
else
{
Son2_lag=false;//Son2等待取消
cout<<"处于等待的Son2自动被调用"<<endl;
Daughter_b=1;
}
}
else
{
if(Daughter1_lag==true)
{
Daughter1_lag=false;//Daughter1等待取消
cout<<"处于等待的Daughter1自动被调用"<<endl;
Daughter1(); //处于等待的Daughter1()自动调用
Daughter_b=0;
{
Mother_lag=false;
}
else if(Daughter2_lag==true)
{
Daughter2_lag=false;//Daughter2等待取消
cout<<"处于等待的Daughter1自动被调用"<<endl;
Daughter2(); //处于等待的Daughter2()自动调用
Daughter_b=0;
}
}
}
(2)整型变量orange和apple分别表示盘子中的橘子和苹果数目,初始都为0,Plate_Size=apple+orange。
(3)用6个bool型的变量Father_lag,Mother_lag,Son1_lag,Son2_lag,Daughter1_lag,Daughter2_lag表示六个进程是否处于等待状态。处于等待时,变量值为true。
{
Son2_lag=false; //Son2等待取消
cout<<"处于等待的Son2自动被调用"<<endl;
Son2(); //处于等待的Son2()自动调用
Son_a=0;
}
}
}
break;
case 2:
cout<<" Son1调用."<<endl;
if(orange==0)