用信号量及其PV操作处理实际问题
Posted wzc201706110013
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用信号量及其PV操作处理实际问题相关的知识,希望对你有一定的参考价值。
将生产者和消费者问题深入理解、融会贯通。
1.书上课后练习P187-43
semaphore mutex=1,p=1, p1=0, p2=0, p3=0;
process p(){
while(ture){
p(p);
p(mutex);
放入原料;
if(放入糖) v(p2);
if(放入水) v(p3);
else v(p1);
v(mutex); } }
process p1() {
while(ture){
p(p1);
p(mutex);
取走橘子精;
v(mutex);
v(p); } }
process p2() {
while(ture){
p(p2);
p(mutex);
取走糖;
v(mutex);
v(p); } }
process p3() {
while(ture){
p(p3);
p(mutex);
取走水;
v(mutex);
v(p); } }
2.IPO问题:有多个输入进程、多个处理进程和多个输出进程。输入进程把数据逐步输入到一个有M个单位缓冲区B1上,经处理进程处理之后放到有N个单位的缓冲区B2上,由输出进程进行输出。
- 这个问题有哪些进程?进程之间有什么样的制约关系?
- 用信号量及PV操作写出这些进程之间的同步算法。
1.①这个问题有3个进程,分别是R进程:负责从卡片输入机上读入卡片信息,输入到缓存区B1中;C进程:负责从缓存区B1取出信息,进行加工处理,之后将结果送到缓冲区B2中;P进程:负责从缓冲区B2中取出信息,并在打印机上打印出。
②R进程受C进程影响,B1放满信息后R进程需要等待C进程将B1中的信息全部取走才可以继续读入信息;C进程受R进程约束,当B1信息满了以后,C进程才可以取走B1中的信息,并且B2被取空后C进程才可以将加工结果送入其中;P进程受C进程的约束,B2信息放满后P进程才可以取出并且打印。
2.
semaphore b1full=0, b1empty=0, b2full=0, b2empty=0;
process R() {
输入信息写入缓冲区R1中;
v(b1full);
p(b1empty);
}
process C() {
p(b1full);
从B1中取出信息;
加工信息;
结果送去B2;
v(b1empty);
v(b2full);
p(b1empty);
}
process P() {
p(b1full);
从B2中取出信息进行打印;
v(b2empty);
}
3.探索哲学家问题的正确解法。
以上是关于用信号量及其PV操作处理实际问题的主要内容,如果未能解决你的问题,请参考以下文章