temp=a[i];
a[i]=a[j];
a[j]=temp;
}//if
}//for
}
}
2.修改P1、P2、P3程序
Process1() 在阻塞前插入以下操作代码
Process1() 在阻塞前插入以下操作
Process1程序:
process1(){
charflag;
chara[100];
intlen;
if(addr=='m')gotom;
i=1;m1=1;
a:
printf("\nprocess1printingm1=%d\n\n",m1);
printf("doyouwanttosenddata?
(y/n)");//是否发送消息
flag=getchar();
if(flag=='y'||flag=='Y'){
printf("inputdata:
");
scanf("%s",a);
len=strlen(a);
send(1,a,len);//将消息输送到缓冲队列中
printf("\n");
}
printf("process1callsponsem1!
\n");
if(p(1,1,'m')==0)
return(0);
m:
printf("\n=>process1i=%d\n\n",i);
i=i+5;
gotoa;
}
Process2程序:
process2(){
charflag;
charb[100];
intlen;
if(addr=='m')gotom;
if(addr=='n')goton;
i=1;
a:
printf("\nprocess2printingm1=%d\n",m1);
m2=2*m1;
printf("doyouwanttoreceivemessage?
(y/n)");//是否接收消息
getchar();
flag=getchar();
if(flag=='y'||flag=='Y')
{
if(receive(1,b)==0){//消息队列为空
getchar();
}else{//打印接收的消息,并且排序
printf("\n%s\n\n",b);
len=strlen(b);
sort(b,len);
printf("\n%s\n\n",b);
send(2,b,len);}
}
printf("process2callponsem2\n");
if(p(2,2,'m')==0)
return(0);
m:
printf("process2callvonsem1!
\n");
if(v(1,2,'n')==0)
return(0);
n:
printf("\n=>process2i=%d\n\n",i);
i=i+10;
gotoa;
}
Process3()在P3调用V操作唤醒P2前加入以下操作
Process3程序:
process3(){
charc[100];
if(addr=='m')gotom;
if(addr=='n')goton;
i=1;
a:
printf("\n=>process3i=%d\n",i);
if(i>=num)gotob;
printf("\nprocess3printing2^i=%d\n\n",m2);
m1=m2;
if(receive(2,c)){
printf("==>SORTRESULT:
%s\n\n",c);
getchar();
}
else{
printf("==>SORTRESULT:
\n\n");
getchar();
}
getchar();
printf("process3callvonsem2!
\n");
if(v(2,3,'m')==0)return(0);
m:
i++;
gotoa;
b:
if(receive(2,c)){
printf("==>result:
%s\n\n",c);
getchar();
}
else{
printf("==>result:
\n\n");
getchar();
}
printf("\nprocess3callsponsem2\n");
if(p(2,3,'n')==0)return(0);
n:
;
}
四、测试情况、分析
下面的是调试正确后的程序结果:
(1)发送后立刻接受:
(2)接下来三个进程
五、收获与体会
经过这次的实验,我收获良多,同时也让我明白,动手了,实践了就有希望,就会有希望完成任务。
刚开始做这次实验的时候,发现很没有头绪,除了老师给的PPT就没有一点线索。
只能硬着头皮去看之前做实验的程序代码,理解每个模块的作用,然后记录下来,对照之前老师给我们的讲解。
我发现通过流程图编写程序是一个很好的方法,不仅仅调理清晰,最重要的是减少很多的参数,便于程序员很快的了解每个参数、模块的功能。
之后我们根据老师给的流程图写出了程序代码。
通过这个实验,我决定以后的编程过程中,我必定会写好每一个项目的流程,以最好的效率完成既定的任务。