课程设计报告--苹果问题

《操作系统》课程设计报告

专业: 班级:

题目名称: 完成日期:

甘肃政法学院计算机科学学院

目录

目录................................................................................................................................................... 1 1.设计题目与要求 ......................................................................................................................... 2

1.1设计目的 ............................................................................................................................. 2 1.2设计要求 ............................................................................................................................ 2 2. 总体设计思想 ........................................................................................................................... 2

2.1总体设计思想 ..................................................................................................................... 2 3. 功能设计 ................................................................................................................................... 3

3.1 数据结构设计 .................................................................................................................... 3 3.2模块说明 ............................................................................................................................. 3 3.3 各模块的算法流程图 ........................................................................................................ 4 3.4 P、V原语的描述 ............................................................................................................. 7 4 .开发平台及程序清单的主要部分 ............................................................................................... 8

4.1开发平台 ............................................................................................................................. 8 5. 运行结果与运行情况分析 .......................................................................................................... 9

5.1运行结果 ............................................................................................................................. 9 6. 自我评价与总结 ........................................................................................................................ 10 7. 参考资料 .................................................................................................................................... 11 附录................................................................................................................................................. 12

1、分工说明: ....................................................................................................................... 12 2、程序源代码: ................................................................................................................... 12

1.设计题目与要求

1.1设计目的

通过实现吃水果问题的同步,深入了解和掌握进程同步的原理。

1.2设计要求

吃水果问题的描述:

桌子上有一只盘子,最多可容纳两个水果,每次只能放入或者取出一个水果。爸爸专门向盘子中放苹果(apple),妈妈专门向盘子中放橘子(orange),两个儿子专门等待吃盘子中的橘子,两个女儿专门等吃盘子中的苹果。

2. 总体设计思想

2.1总体设计思想

这是进程同步与互斥问题的模拟,可以把向盘子放或取水果的每一个过程可以转为一个进程的操作,这些进程是互斥的,同时也存在一定的同步关系。通过编程实践时,实际是随机的调用一个进程的操作,而这些进程的操作相当于程序中的函数调用。而计算机在执行时每一个时刻只能执行一个操作,这就是互斥的表现。同步的模拟可以类似于函数调用时的前提关系即先决条件。这样进程同步模拟就完全可以通过函数的调用来实现。 具体的每一个操作的对应的函数的关系: 爸爸向盘子中放一个苹果:Father() 妈妈向盘子中放一个橘子:Mother() 儿子1从盘子取一个橘子:Son1() 儿子2从盘子取一个橘子:Son2()

女儿1从盘子取一个橘子:Daugther1() 女儿2从盘子取一个橘子:Daugther2()

3. 功能设计

3.1 数据结构设计

(1)用一个整型变量Plate_Size表示盘子里的水果数量,初始值为0,当放水果时Plate_Size加1,取水果时Plate_Size减1。变量Plate_Size的最大值为2,当为2时表示盘子已经满,此时若进行放水果操作,放水果将处于等待状态;为0时表示盘子为空,此时若进行取水果操作,取水果操作将处于等待状态,Plate_Size是爸爸和妈妈进行放水果的私有信号量。

(2)整型变量orange和apple分别表示盘子中的橘子和苹果数目,初始都为0,其中orange是儿子的私有变量,apple是女儿的私有变量,盘子中的总水果数是 Plate_Size=apple+orange。

(3)用6个bool型的变量 Father_lag,Mother_lag,Son1_lag,Son2_lag,Daughter1_lag,Daughter2_lag表示六个进程是否处于等待状态。处于等待时,变量值为true。

(4)两个放水果进程同时处于等待状态时,若有取水果的操作将自动执行等待的放水果进程,执行按等待的先后顺序自动调用;两个取苹果或橘子进程同时候处于等待状态,若有放苹果或橘子的操作将自动执行等待的取进程,进行按等待的先后顺序自动调用。 (5)用一个随机的函数产生0—5的6个整数,分别对应六个进程的调用。

3.2模块说明

3.2.1 主函数

用一个随机的函数产生0—5的6个整数,即 i=rand()%6,分别对应六个进程的调用,

调用的次数可以通过修改K值来实现,for(k=0;k

3.2.2 6个进程函数

爸爸向盘子中放一个苹果操作:Father()

妈妈向盘子中放一个橘子操作:Mother()

儿子1从盘子取一个橘子操作:Son1() 儿子2从盘子取一个橘子操作:Son2() 女儿1从盘子取一个橘子操作:Daugther1() 女儿2从盘子取一个橘子操作:Daugther2()

3.2.3 Print函数

用于输出盘子中苹果和橘子的个数,水果总个数及哪些进程处于等待状态。

3.3 各模块的算法流程图

3.3.1放水果操作

A、爸爸放苹果进程的操作流程图:

B、妈妈放橘子进程的操作流程图

3.3.2取水果操作

儿子1取橘子的操作流程图

女儿i取苹果的操作流程图

3.4 P、V原语的描述

Semaphore Plate_Siz Semaphore apple Semaphore orange Father() {

While(ture) {

P(Plate_Siz) P(mutex)

父亲向盘子中放进一个苹果 V(apple) V(mutex) }

}

Mother() {

While(ture) {

P(Plate_Siz) P(mutex)

母亲向盘子中放进一个桔子 V(orange) V(mutex) } }

Son(i) {

While(ture) {

P(Plate_Siz) P(mutex) P(apple)

儿子从盘子中走一个桔子 V(orange) V(mutex) } }

Daugther (i) {

While(ture) {

P(Plate_Siz) P(mutex)

女儿从盘子中走一个苹果 V(apple) V(mutex) } }

4 .开发平台及程序清单的主要部分4.1开发平台

(1)使用系统:Windows XP

(2)使用语言:C++

(3)开发工具:Visual C++ 6.0

5. 运行结果与运行情况分析

5.1运行结果

第一次运行结果为:

第二次运行结果为:

6. 自我评价与总结

此次试验是完全在小组合作下完成的,首先在分析问题并把问题转化为编程问题,对

进程同步理解的比较透彻;其次我用了个随机函数来调用相应的进程函数,这对进程间的同步和等待状态有很好的说明和十分的全面;再次我们设了六个bool型的变量来表示各

进程时候处于等待状态,还设置了相应的整型变量来解决等待进程在适当的条件下自动调

用的先后问题。

任有不足之处,由于各进程调用是随机的,在某个处于等待状态时,可以还能被调用,

事实上这不是很合理。因为处于等待状态的进程就不可能在被分配调用。再有就是程序有些代码部分有重的,可以把这些重复执行的代码写成函数,需要用时直接调用代码函数。 这次自己的收获还是不小,首先使我们提高了分析问题,并根据需求转化成相应的程序结构的能力;其次也丰富了自己编写程序,调试程序的经验,这使得我编程时可能出现的错误的认识,并如何去避免产生了新的认识。

对于此题我觉得除了可以用随机函数来产生随机数来调用相应的进程函数,也可以用

人输入的方式来选择调用相应的进程函数,这样可以会麻烦些,不过对进程同步的模拟可能会更加透彻。

总的来说这次试验比较成功,加深我了进程的理解,同时也提高了自己的编程的能力。编程是个长久的过程,平时要多去动手实践,去提高自己分析问题、发现问题、解决问题的能力。

7. 参考资料

[1]宗大华,宗涛,陈吉人著 操作系统 北京:人民邮电出版社,2009

[2]李爱华,程磊著 面相对象程序设计(C++语言) 北京: 清华大学出版社,2010

[3]宋晓宇 , windows操作系统核心编程实验教程 中国铁道出版社 [4]张丽芬 刘利雄 王金玉编著 操作系统实验教程 清华大学出版社

附录

1、分工说明:

2、程序源代码:

#include //用到了time函数,所以要有这个头文件 #include //用到了srand函数,所以要有这个头文件 #include

int Plate_Size=0; //表示盘子中当前有几个水果

int orange=0,apple=0; //表示盘子中orange和apple的个数

bool Father_lag,Mother_lag,Son1_lag,Son2_lag,Daughter1_lag,Daughter2_lag; //六个进程处于等待时,变量值为true

void main() //main()函数,实现其他功能函数的调用 { void Print(); //函数声明 void Father(); void Mother(); void Son1(); void Son2(); void Daughter1(); void Daughter2(); int k;

srand((unsigned)time(NULL));//srand()函数产生一个以当前时间开始的随机种子 for(k=0;k

{ cout

int MonFa_c,Daughter_b,Son_a; //for语句的局部变量,控制进程等待的优先次序,MonFa_c=2,Mather()执行,MonFa_c=1,Father()执行

switch(i) //0为Father()调用,1为Mother()调用,2、3为Son1()、Son2()调,4、5为Daughteri()调用 { case 0: cout

Father_lag=true; //Father()等待

Print();

if(Mother_lag==false)

MonFa_c=1;

} else {

Father();

if((Daughter1_lag==true)&&(Daughter2_lag==true)) { if(Daughter_b==1)

{

Daughter1_lag=false;//Daughter1等待取消 Daughter1(); //处于等待的Daughter1自动调用

Daughter_b=2; //优先级让给Daughter2

}

else { Daughter2_lag=false;//Daughter2等待取消 Daughter2(); //处于等待的Daughter2()自动调用 Daughter_b=1; //优先级让给Daughter1

}

} else { if(Daughter1_lag==true)

{

Daughter1_lag=false;//Daughter1等待取消 Daughter1(); //处于等待的Daughter1()自动调用 Daughter_b=0; //没有等待的Dauther进程 }

else if(Daughter2_lag==true)

{

Daughter2_lag=false;//Daughter2等待取消 Daughter2(); //处于等待的Daughter2()自动调用 Daughter_b=0;

}

}

} break; case 1:

cout

Print();

if(Father_lag==false)

MonFa_c=2;

} else {

Mother();

if((Son1_lag==true)&&(Son2_lag==true)) //Son1和Son2都等待 {

if(Son_a==1) //Son1执行 { Son1_lag=false;//Son1等待取消 Son1(); //处于等待的Son1()自动调用 Son_a=2; //优先级让给Son2

}

else { Son2_lag=false;//Son2等待取消 Son2(); //处于等待的Son2()自动调用

Son_a=1; //优先级让给Son1

}

} else {

if(Son1_lag==true)

{

Son1_lag=false; //Son1等待取消

Son1(); //处于等待的Son1()自动调用 Son_a=0;

}

else if(Son2_lag==true)

{

Son2_lag=false; //Son2等待取消 Son2(); //处于等待的Son2()自动调用 Son_a=0;

}

} } break; case 2:

cout

Son1_lag=true; //Son1处于等待

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先等待,因此先调用

{

Father_lag=false; Father(); MonFa_c=2;

}

else //Father和Mother同时处于等待,但Mother先等待,因此先调用 {

Mother_lag=false; Mother(); MonFa_c=1;

} } else

{

if(Father_lag==true) //只有Father处于等待,调用

{

Father_lag=false; MonFa_c=0;

Father(); }

else if(Mother_lag==true)//只有Mother处于等待,调用 {

Mother_lag=false; Mother(); MonFa_c=0;

}

}

} break; case 3:

cout

{

Son2_lag=true; //Son2处于等待

if(Son1_lag==false)

Son_a=2;

} else

{ Son2();

if((Father_lag==true)&&(Mother_lag==true)) { if(MonFa_c==1)//Father和Mother同时处于等待,但Father先等待,因此先调用 {

Father_lag=false; Father(); MonFa_c=2; } else //Father和Mother同时处于等待,但Mother先等待,因此先调用

{ Mother_lag=false; Mother();

MonFa_c=1; }

} else

{

if(Father_lag==true) //只有Father处于等待,调用Father { Father_lag=false; Father();

MonFa_c=0; }

else if(Mother_lag==true) //只有Mother处于等待,调用Mother { Mother_lag=false; Mother(); MonFa_c=0;

}

}

} break;

case 4: cout

if(apple==0) {

Daughter1_lag=true; //Daughter1等待

if(Daughter2_lag==false)

Daughter_b=1;

} else { Daughter1();

if((Father_lag==true)&&(Mother_lag==true))

{

if(MonFa_c==1) //Father和Mother同时处于等待,但Father先等待,因此先调用 { Father_lag=false; Father(); MonFa_c=2; } else //Father和Mother同时处于等待,但Mother先等待,因此先调用

{

Mother_lag=false; Mother(); MonFa_c=1;

}

} else {

if(Father_lag==true) //只有Father处于等待,调用 { Father_lag=false; Father(); MonFa_c=0; } else if(Mother_lag==true) //只有Mother处于等待,调用

{ Mother_lag=false; Mother(); MonFa_c=0; }

}

}

break; case 5: cout

Daughter2_lag=true; //Daughter2等待

Print();

if(Daughter1_lag==false) Daughter_b=2;

} else { Daughter2();

if((Father_lag==true)&&(Mother_lag==true)) { if(MonFa_c==1) //Father和Mother同时处于等待,但Father先等待,因此先调用 { Father_lag=false; Father(); MonFa_c=2; } else //Father和Mother同时处于等待,但Mother先等待,因此先调用 { Mother_lag=false;

Mother(); MonFa_c=1; }

} else { if(Father_lag==true) //只有Father处于等待,调用 { Father_lag=false;

Father(); MonFa_c=0; }

else if(Mother_lag==true) //只有Mother处于等待,调用 { Mother_lag=false; Mother(); MonFa_c=0; }

}

}

break;

} //switch语句结束 } //for语句结束 } //main函数结束

void Print() //Print函数(打印盘子剩余水果及各进程等待状态) {

}

void Father() //Father进程 { }

void Mother() //Mother进程 { }

void Son1() //Son1进程 { }

void Son2() //Son2进程 { }

void Daughter1() //Daughter1进程 { }

void Daughter2() //Daughter2进程 { }

apple--; Print(); apple--; Print(); orange--; Print(); orange--; Print(); orange++; Print(); apple++; Print();

cout

cout

if(((Father_lag==false)&&(Mother_lag==false)&&(Son1_lag==false)&&(Son2_lag==false)&&(Daughter1_

cout

果."

lag==false)&&(Daughter2_lag==false))!=true)

《操作系统》课程设计报告

专业: 班级:

题目名称: 完成日期:

甘肃政法学院计算机科学学院

目录

目录................................................................................................................................................... 1 1.设计题目与要求 ......................................................................................................................... 2

1.1设计目的 ............................................................................................................................. 2 1.2设计要求 ............................................................................................................................ 2 2. 总体设计思想 ........................................................................................................................... 2

2.1总体设计思想 ..................................................................................................................... 2 3. 功能设计 ................................................................................................................................... 3

3.1 数据结构设计 .................................................................................................................... 3 3.2模块说明 ............................................................................................................................. 3 3.3 各模块的算法流程图 ........................................................................................................ 4 3.4 P、V原语的描述 ............................................................................................................. 7 4 .开发平台及程序清单的主要部分 ............................................................................................... 8

4.1开发平台 ............................................................................................................................. 8 5. 运行结果与运行情况分析 .......................................................................................................... 9

5.1运行结果 ............................................................................................................................. 9 6. 自我评价与总结 ........................................................................................................................ 10 7. 参考资料 .................................................................................................................................... 11 附录................................................................................................................................................. 12

1、分工说明: ....................................................................................................................... 12 2、程序源代码: ................................................................................................................... 12

1.设计题目与要求

1.1设计目的

通过实现吃水果问题的同步,深入了解和掌握进程同步的原理。

1.2设计要求

吃水果问题的描述:

桌子上有一只盘子,最多可容纳两个水果,每次只能放入或者取出一个水果。爸爸专门向盘子中放苹果(apple),妈妈专门向盘子中放橘子(orange),两个儿子专门等待吃盘子中的橘子,两个女儿专门等吃盘子中的苹果。

2. 总体设计思想

2.1总体设计思想

这是进程同步与互斥问题的模拟,可以把向盘子放或取水果的每一个过程可以转为一个进程的操作,这些进程是互斥的,同时也存在一定的同步关系。通过编程实践时,实际是随机的调用一个进程的操作,而这些进程的操作相当于程序中的函数调用。而计算机在执行时每一个时刻只能执行一个操作,这就是互斥的表现。同步的模拟可以类似于函数调用时的前提关系即先决条件。这样进程同步模拟就完全可以通过函数的调用来实现。 具体的每一个操作的对应的函数的关系: 爸爸向盘子中放一个苹果:Father() 妈妈向盘子中放一个橘子:Mother() 儿子1从盘子取一个橘子:Son1() 儿子2从盘子取一个橘子:Son2()

女儿1从盘子取一个橘子:Daugther1() 女儿2从盘子取一个橘子:Daugther2()

3. 功能设计

3.1 数据结构设计

(1)用一个整型变量Plate_Size表示盘子里的水果数量,初始值为0,当放水果时Plate_Size加1,取水果时Plate_Size减1。变量Plate_Size的最大值为2,当为2时表示盘子已经满,此时若进行放水果操作,放水果将处于等待状态;为0时表示盘子为空,此时若进行取水果操作,取水果操作将处于等待状态,Plate_Size是爸爸和妈妈进行放水果的私有信号量。

(2)整型变量orange和apple分别表示盘子中的橘子和苹果数目,初始都为0,其中orange是儿子的私有变量,apple是女儿的私有变量,盘子中的总水果数是 Plate_Size=apple+orange。

(3)用6个bool型的变量 Father_lag,Mother_lag,Son1_lag,Son2_lag,Daughter1_lag,Daughter2_lag表示六个进程是否处于等待状态。处于等待时,变量值为true。

(4)两个放水果进程同时处于等待状态时,若有取水果的操作将自动执行等待的放水果进程,执行按等待的先后顺序自动调用;两个取苹果或橘子进程同时候处于等待状态,若有放苹果或橘子的操作将自动执行等待的取进程,进行按等待的先后顺序自动调用。 (5)用一个随机的函数产生0—5的6个整数,分别对应六个进程的调用。

3.2模块说明

3.2.1 主函数

用一个随机的函数产生0—5的6个整数,即 i=rand()%6,分别对应六个进程的调用,

调用的次数可以通过修改K值来实现,for(k=0;k

3.2.2 6个进程函数

爸爸向盘子中放一个苹果操作:Father()

妈妈向盘子中放一个橘子操作:Mother()

儿子1从盘子取一个橘子操作:Son1() 儿子2从盘子取一个橘子操作:Son2() 女儿1从盘子取一个橘子操作:Daugther1() 女儿2从盘子取一个橘子操作:Daugther2()

3.2.3 Print函数

用于输出盘子中苹果和橘子的个数,水果总个数及哪些进程处于等待状态。

3.3 各模块的算法流程图

3.3.1放水果操作

A、爸爸放苹果进程的操作流程图:

B、妈妈放橘子进程的操作流程图

3.3.2取水果操作

儿子1取橘子的操作流程图

女儿i取苹果的操作流程图

3.4 P、V原语的描述

Semaphore Plate_Siz Semaphore apple Semaphore orange Father() {

While(ture) {

P(Plate_Siz) P(mutex)

父亲向盘子中放进一个苹果 V(apple) V(mutex) }

}

Mother() {

While(ture) {

P(Plate_Siz) P(mutex)

母亲向盘子中放进一个桔子 V(orange) V(mutex) } }

Son(i) {

While(ture) {

P(Plate_Siz) P(mutex) P(apple)

儿子从盘子中走一个桔子 V(orange) V(mutex) } }

Daugther (i) {

While(ture) {

P(Plate_Siz) P(mutex)

女儿从盘子中走一个苹果 V(apple) V(mutex) } }

4 .开发平台及程序清单的主要部分4.1开发平台

(1)使用系统:Windows XP

(2)使用语言:C++

(3)开发工具:Visual C++ 6.0

5. 运行结果与运行情况分析

5.1运行结果

第一次运行结果为:

第二次运行结果为:

6. 自我评价与总结

此次试验是完全在小组合作下完成的,首先在分析问题并把问题转化为编程问题,对

进程同步理解的比较透彻;其次我用了个随机函数来调用相应的进程函数,这对进程间的同步和等待状态有很好的说明和十分的全面;再次我们设了六个bool型的变量来表示各

进程时候处于等待状态,还设置了相应的整型变量来解决等待进程在适当的条件下自动调

用的先后问题。

任有不足之处,由于各进程调用是随机的,在某个处于等待状态时,可以还能被调用,

事实上这不是很合理。因为处于等待状态的进程就不可能在被分配调用。再有就是程序有些代码部分有重的,可以把这些重复执行的代码写成函数,需要用时直接调用代码函数。 这次自己的收获还是不小,首先使我们提高了分析问题,并根据需求转化成相应的程序结构的能力;其次也丰富了自己编写程序,调试程序的经验,这使得我编程时可能出现的错误的认识,并如何去避免产生了新的认识。

对于此题我觉得除了可以用随机函数来产生随机数来调用相应的进程函数,也可以用

人输入的方式来选择调用相应的进程函数,这样可以会麻烦些,不过对进程同步的模拟可能会更加透彻。

总的来说这次试验比较成功,加深我了进程的理解,同时也提高了自己的编程的能力。编程是个长久的过程,平时要多去动手实践,去提高自己分析问题、发现问题、解决问题的能力。

7. 参考资料

[1]宗大华,宗涛,陈吉人著 操作系统 北京:人民邮电出版社,2009

[2]李爱华,程磊著 面相对象程序设计(C++语言) 北京: 清华大学出版社,2010

[3]宋晓宇 , windows操作系统核心编程实验教程 中国铁道出版社 [4]张丽芬 刘利雄 王金玉编著 操作系统实验教程 清华大学出版社

附录

1、分工说明:

2、程序源代码:

#include //用到了time函数,所以要有这个头文件 #include //用到了srand函数,所以要有这个头文件 #include

int Plate_Size=0; //表示盘子中当前有几个水果

int orange=0,apple=0; //表示盘子中orange和apple的个数

bool Father_lag,Mother_lag,Son1_lag,Son2_lag,Daughter1_lag,Daughter2_lag; //六个进程处于等待时,变量值为true

void main() //main()函数,实现其他功能函数的调用 { void Print(); //函数声明 void Father(); void Mother(); void Son1(); void Son2(); void Daughter1(); void Daughter2(); int k;

srand((unsigned)time(NULL));//srand()函数产生一个以当前时间开始的随机种子 for(k=0;k

{ cout

int MonFa_c,Daughter_b,Son_a; //for语句的局部变量,控制进程等待的优先次序,MonFa_c=2,Mather()执行,MonFa_c=1,Father()执行

switch(i) //0为Father()调用,1为Mother()调用,2、3为Son1()、Son2()调,4、5为Daughteri()调用 { case 0: cout

Father_lag=true; //Father()等待

Print();

if(Mother_lag==false)

MonFa_c=1;

} else {

Father();

if((Daughter1_lag==true)&&(Daughter2_lag==true)) { if(Daughter_b==1)

{

Daughter1_lag=false;//Daughter1等待取消 Daughter1(); //处于等待的Daughter1自动调用

Daughter_b=2; //优先级让给Daughter2

}

else { Daughter2_lag=false;//Daughter2等待取消 Daughter2(); //处于等待的Daughter2()自动调用 Daughter_b=1; //优先级让给Daughter1

}

} else { if(Daughter1_lag==true)

{

Daughter1_lag=false;//Daughter1等待取消 Daughter1(); //处于等待的Daughter1()自动调用 Daughter_b=0; //没有等待的Dauther进程 }

else if(Daughter2_lag==true)

{

Daughter2_lag=false;//Daughter2等待取消 Daughter2(); //处于等待的Daughter2()自动调用 Daughter_b=0;

}

}

} break; case 1:

cout

Print();

if(Father_lag==false)

MonFa_c=2;

} else {

Mother();

if((Son1_lag==true)&&(Son2_lag==true)) //Son1和Son2都等待 {

if(Son_a==1) //Son1执行 { Son1_lag=false;//Son1等待取消 Son1(); //处于等待的Son1()自动调用 Son_a=2; //优先级让给Son2

}

else { Son2_lag=false;//Son2等待取消 Son2(); //处于等待的Son2()自动调用

Son_a=1; //优先级让给Son1

}

} else {

if(Son1_lag==true)

{

Son1_lag=false; //Son1等待取消

Son1(); //处于等待的Son1()自动调用 Son_a=0;

}

else if(Son2_lag==true)

{

Son2_lag=false; //Son2等待取消 Son2(); //处于等待的Son2()自动调用 Son_a=0;

}

} } break; case 2:

cout

Son1_lag=true; //Son1处于等待

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先等待,因此先调用

{

Father_lag=false; Father(); MonFa_c=2;

}

else //Father和Mother同时处于等待,但Mother先等待,因此先调用 {

Mother_lag=false; Mother(); MonFa_c=1;

} } else

{

if(Father_lag==true) //只有Father处于等待,调用

{

Father_lag=false; MonFa_c=0;

Father(); }

else if(Mother_lag==true)//只有Mother处于等待,调用 {

Mother_lag=false; Mother(); MonFa_c=0;

}

}

} break; case 3:

cout

{

Son2_lag=true; //Son2处于等待

if(Son1_lag==false)

Son_a=2;

} else

{ Son2();

if((Father_lag==true)&&(Mother_lag==true)) { if(MonFa_c==1)//Father和Mother同时处于等待,但Father先等待,因此先调用 {

Father_lag=false; Father(); MonFa_c=2; } else //Father和Mother同时处于等待,但Mother先等待,因此先调用

{ Mother_lag=false; Mother();

MonFa_c=1; }

} else

{

if(Father_lag==true) //只有Father处于等待,调用Father { Father_lag=false; Father();

MonFa_c=0; }

else if(Mother_lag==true) //只有Mother处于等待,调用Mother { Mother_lag=false; Mother(); MonFa_c=0;

}

}

} break;

case 4: cout

if(apple==0) {

Daughter1_lag=true; //Daughter1等待

if(Daughter2_lag==false)

Daughter_b=1;

} else { Daughter1();

if((Father_lag==true)&&(Mother_lag==true))

{

if(MonFa_c==1) //Father和Mother同时处于等待,但Father先等待,因此先调用 { Father_lag=false; Father(); MonFa_c=2; } else //Father和Mother同时处于等待,但Mother先等待,因此先调用

{

Mother_lag=false; Mother(); MonFa_c=1;

}

} else {

if(Father_lag==true) //只有Father处于等待,调用 { Father_lag=false; Father(); MonFa_c=0; } else if(Mother_lag==true) //只有Mother处于等待,调用

{ Mother_lag=false; Mother(); MonFa_c=0; }

}

}

break; case 5: cout

Daughter2_lag=true; //Daughter2等待

Print();

if(Daughter1_lag==false) Daughter_b=2;

} else { Daughter2();

if((Father_lag==true)&&(Mother_lag==true)) { if(MonFa_c==1) //Father和Mother同时处于等待,但Father先等待,因此先调用 { Father_lag=false; Father(); MonFa_c=2; } else //Father和Mother同时处于等待,但Mother先等待,因此先调用 { Mother_lag=false;

Mother(); MonFa_c=1; }

} else { if(Father_lag==true) //只有Father处于等待,调用 { Father_lag=false;

Father(); MonFa_c=0; }

else if(Mother_lag==true) //只有Mother处于等待,调用 { Mother_lag=false; Mother(); MonFa_c=0; }

}

}

break;

} //switch语句结束 } //for语句结束 } //main函数结束

void Print() //Print函数(打印盘子剩余水果及各进程等待状态) {

}

void Father() //Father进程 { }

void Mother() //Mother进程 { }

void Son1() //Son1进程 { }

void Son2() //Son2进程 { }

void Daughter1() //Daughter1进程 { }

void Daughter2() //Daughter2进程 { }

apple--; Print(); apple--; Print(); orange--; Print(); orange--; Print(); orange++; Print(); apple++; Print();

cout

cout

if(((Father_lag==false)&&(Mother_lag==false)&&(Son1_lag==false)&&(Son2_lag==false)&&(Daughter1_

cout

果."

lag==false)&&(Daughter2_lag==false))!=true)


相关文章

  • 小学科学课题开题报告
  • 小学科学课题开题报告:农村小学科学课堂教学资源开发的研究 课题方案:农村小学科学课堂教学资源开发的研究 一.课题的提出 : 小学科学课堂教学资源是在现代教育教学技术的支撑下,依据小学科学课程目标和学科内在逻辑关系构建的.可进行个性化修改和不 ...查看


  • 建筑企业管理学课程设计
  • 河北科技师范学院 课程设计报告 课程名称: 设计题目: 建筑企业文化建设 院 系: 城市建设学院 专业班级: 工管接本1105班 组 号: 第十二组 起止日期: 2012年6月18日2012年6月21日 指导教师: 徐淑媛 组员分工:组长: ...查看


  • 大学生手机使用调研计划书
  • 城市学院大学生群体手机使用情况 一.前言 随着科技的发展,手机早已摆脱了"奢侈品"的身份,变得越来越普及.它不仅超越了传统意义上的通讯工具,而且逐渐成为一种个性化的体现.从衣冠楚楚的白领上班族到普通的工薪阶层,都成为手机 ...查看


  • 室内设计入门课件_9建议书.报告书.进展册
  • 建议书.报告书.进展册教学目的:了解掌握设计市场对建议书.报告书.进展册的要求,能够独立制作.教学重点:建议书.报告书如何适应设计市场要求,展现设计思考.教学难点:1.建议书.报告书的分析与组织.2 .进展册在设计中的作用. 概述建议书.报 ...查看


  • 我的课改之路
  • 我的"课改之路" 新一轮课程改革为学生创造了有价值的学习方式,强调全面评价学生,关注学生的发展,它渗透着对学生的人文关怀,增强对学生的尊重和信任,这些对学生的个性发展和健康成长是至关重要的.作为一直跟随课改脚步的实验教师 ...查看


  • 高端民办学校发展定位做一流教育
  • 做一流教育 育时代精英 --成都金苹果公学介绍 成都金苹果公学,位于先导文化群体汇聚的成都高新区神仙树高尚国际社区,是金苹果教育投资集团倾情打造的一所中西文化兼容,走读.寄宿兼有的精品学校. ■学校的办学定位--精英教育. ■学校的办学理念 ...查看


  • 农业工程与可持续发展课程论文格式
  • <农业工程与可持续发展>课程论文 题 目: 院 (系): 专 业: 学 号: 姓 名: 授课教师: 完成日期: 张若宇 (空行,五号) 题名一般不超过20个汉字,应简明.(黑体,小二,居中) 作者(居中.四号.仿宋) 体.确切, ...查看


  • 课改中的几个重要环节
  • 课改中的几个关键环节 尊敬的各位老师,应朱校长的邀请,今天我和大家交流一下课改中的一些问题,就小学的课堂改革,我真不敢在此妄加指导,大家都知道我是高中教师,主要研究高中教学,对小学教学知之甚少.其次,教育必须按照教育规律办事,必须符合学生的 ...查看


  • 苹果公司战略管理报告
  • 班级: 组员:朱杰 日期: <战略管理>课程期末考查 苹果公司战略规划报告 10市场营销在(专) 2010010138 何新杰 2010010131 黄丽玲 2010010140 鞠佳佳 2010010159 张才 201001 ...查看


热门内容