1.书上课后练习P187-43
Cemaphore empty=1;
橘子精=0;糖=0;水=0;
Process product(){
While(true){
P(empty);
产生一个随机数s;
If(s==0) V(橘子精);
If(s==1) V(水);
If(s==2) V(糖);
}
}
Process P1(){
Process P2(){
Process P3(){
While(true){
while(true){
while(true){
P(橘子精);
P(糖);
P(水);
取走橘子精;
取走糖;
取走水;
V(empty);
V(empty);
V(empty);
}
}
}
}
}
}
Coend
2.IPO问题:有多个输入进程、多个处理进程和多个输出进程。输入进程把数据逐步输入到一个有M个单位缓冲区B1上,经处理进程处理之后放到有N个单位的缓冲区B2上,由输出进程进行输出。
- 这个问题有哪些进程?进程之间有什么样的制约关系?
- 用信号量及PV操作写出这些进程之间的同步算法。
1.有输入进程、处理进程、输出进程。输入进程受处理进程影响,B1放满信息后R进程要等待——等处理进程将其中信息全部取走,才能继续读入信息;处理进程受输入进程和P进程的约束:B1中信息放满后处理进程才可从中取出它们,且B2被取空后处理进程才可将加工结果送入其中;输出进程受处理进程的约束:B2中信息放满后输出进程才可从中取出它们,进行打印。
2.
semaphore s1,s2,s3,s4; semaphore mutex1,mutex2; mutex1=1,mutex2=1; cobegin Process input(){ while(true); input(); p(s1); P(mutex1); 数据放入B1(M1); m1=(m1+1)%M v(mutex1); V(s2); }coend Process Processing(){ while(true); p(s2); P(mutex2); 在B1取出数据; out1=(out1+1)%M; Processing(); v(s1); 数据处理后放入B2(M2); m2=(m2+1)%M v(mutex2); V(s3); }coend Process output(){ while(true); p(s3); 在B2取出数据; ouput(); out2=(out2+1)%M; }coend