苹果-桔子问题的实现 下载本文

致 谢

首先感谢我的老师和同学们在设计过程中给我提出了许多宝贵的意见和建议,并细心的帮助我解决问题,还在最后的调试程序的过程中帮我找出了一些潜在的错误,没有他们,我也许发现不了这些错误,在此非常感谢他们。在这次课程设计的撰写过程中,我得到了许多人的帮助。 我要感谢我的老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次报告的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。其次,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的设计商的难题。同时也感谢学院为我提供良好的做毕业设计的环境。 最后再一次感谢所有在设计中曾经帮助过我的良师益友和同学。

20

附录

#include #include #include int apple=0; int orange=0; int father_lag=1; int mother_lag=1; int son_lag=1; int daughter_lag=1; int plat_size=0; int mf=0; void print();

void father() //父进程 { apple++; print(); }

void mother() //母进程 { orange++; print(); }

void son() //儿子进程{ orange--; print(); }

21

void daughter() //女儿进程 { apple--; print(); }

void print() {

printf(\现在盘子里有 %d个苹果,%d个桔子\\n\if(father_lag==1)

printf(\进程处于等待状态\\n\if(mother_lag==1)

printf(\进程处于等待状态\\n\if(son_lag==1)

printf(\进程处于等待状态\\n\if(daughter_lag==1)

printf(\进程处于等待状态\\n\

if((father_lag==0)&&(mother_lag==0)&&(son_lag==0)&&(daughter==0)) printf(\}

void main() { int k; int i; int d;

printf(\请输入调用次数: \\n\scanf(\

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

22

printf(\━━━━━━━━━━━━━━━━━━━━━\\n\ printf(\第%d次操作: \\n\ i=rand()%4; //随机生成1-5 plat_size=apple+orange; switch(i) { case 0:

printf(\调用.\\n\

if(plat_size==1)

{

father_lag=1; //father处于等待状态 print();

if(mother_lag==0)

mf=1; // father与mother互斥信号量决定先后顺序

} else{ father();

if(daughter_lag==1) {

daughter_lag=0; //等待取消

printf(\处于等待的daughter自动被调用\\n\

daughter(); }

}

printf(\━━━━━━━━━━━━━━━━━━━━\\n\ break;

case 1:

printf(\调用.\\n\

if(plat_size==1)

23