热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

PV操作--题目解析(赞)

感觉概念理解的差不多了,试着做一两道题,来看看是否真的明白,以及还有什么地方不明白的.下面都是软考真题,之前看它的时候,我是一点也不会,只巴望着我软考的时候不要考啊.现在我看看有没有一

感觉概念理解的差不多了,试着做一两道题,来看看是否真的明白,以及还有什么地方不明白的.

 

下面都是软考真题,之前看它的时候,我是一点也不会,只巴望着我软考的时候不要考啊.现在我看看有没有一点点思路.

 

首先静下心来,告诉自己,全都很简单,没什么难的,我都会.没错,我都会.很好,开始看题分析.

 

    分析题,首先,有顾客和收银员两进程,所以这个应该有同步的关系,要协作完成工作.顾客进程的主要工作是,进入超市,在

进超市之前看看自己能不能进,因为超市限制顾客的人数了.然后进去了,就开始买东西,买完了,就找收银员付钱,付完钱就

可以走了.而收银员的工作应该是有顾客付钱来了,就要收钱了,收完钱了,再看看有没有买完东西要付钱的顾客,没有的话,

应该可以休息,有的话就继续收钱.

    

    单看顾客进程,从上往下看.顾客进入了,要看看是不是能进去,有没有地.要跟超市说,”哎,我要申请个资源,要在超市占个

地”,所以P(Sn)一下.忘了提信号量S1,S2和Sn了.

    

    信号量S1,S2,Sn初值分别为0,0,n. Sn 好理解是表示超市可以放n个顾客进来,此时表示的是,还有n个资源,也就是超市

里一个顾客也没有 .S1和S2,都等于0是为什么?是表示顾客和收银员都只有0个资源,那0个资源是什么资源?等会再考虑,

先接着上面分析.

    

    顾客进入,P(Sn)一下,Sn=Sn-1=n-1,n-1>0,所以可以放人.然后在超市购物,购完物要付款了.得找收银员了,是P一下,还是V一下,是P(S1)还是P(S2),是V(S1)还是V(S2)?

    

    由于S1和S2都是0, 虽然照一般的理,一般是先P,再V.而且一般同步是P自己,V别人.但是如果P一下,变-1<0,就要开始等

待了,进行不下去了.所以应该是V一下,V谁呢,V收营员.哪个信号量是收银员?不如假设一个,S1好了.V(S1),释放一个收营

员的资源,S1=S1+1=1>0,所以收银员可以开始收费了.P(S2)一下,S2=S2-1=-1<0,其他顾客,就不要来付钱了,没地.而收银

员要收费就看另一边好了.

 

 

 

    收银员先怎样怎样,然后收费,然后怎样怎样.还是照一般的理,一般是先P,再V.而且一般同步是P自己,V别人.所以看看c1

应该是P,P(S1)=S1-1=1-1=0,表示收银员的资源被占用了,其他要结账的顾客我忙着呢等等啊.c2,是收完钱,V(S2),S2=S2+

1=1>0,所以顾客又可以开始来付钱了.

 

    

    最后顾客走了,释放了他在超市里占的那个资源,V(Sn). 照我分析的结果,ab1b2c1c2分别是P(Sn),V(S1),P(S2),P(S1),V(S2),如果S1和S2信号量的概念错了,应该是P(Sn),V(S2),P(S1),P(S2),V(S1),然后根据选项,可以得出我假设的正好对了.答案是CDA

 

    这道题我们讨论过,现在我觉得没什么问题.看下一题.

   

 

我的解析

 

   这道题问题的需要几个同步信号量和互斥信号量,以及他们的初值是啥.

    

    首先不看题,根据我的一般理解,一个系统中一般是问我有几个同步信号量,和互斥信号量,同步一般是2个,互斥一般是1

个.同步的初值一般是0或者资源数,互斥的初值一般设为1.

    

    现在根据题目的第一句分析,一个仓库,放两种产品P1,P2,每次只能放一种.也就是说,有一个箱子,P1和P2都可以放,但是

一次只能放P1,或者只能放P2,不能同时放,这和互斥很像,想想一下千军万马过独木桥,独木桥谁都能过,但是一次只能过一

个.所以对于箱子而言是互斥的.


    

    这里面有互斥,那么有没有同步.同步是指协作,谁和谁协作,没看出来,应该没有同步吧.初步答案,互斥1个,同步0个.

    

    接着求初始值,看要求,w=P1的数量-P2的数量,而且-i

还有数量限制. w=P1的数量-P2的数量 不明白.但是 -i

应该和k,i都些些关系.如果假设一个极端,num(P1)=0或者num(P2)=0.如果num(P1)=0,则-i<-num(P2)

所以仓库最多放i-1个P2产品;而num(P2)=0,则-i

    

    然后仓库的操作过程可能是这样的.首先假设要放P1进入仓库,要看下仓库里是否有P2产品,如果有P1就不能放进去;如

果没有P2产品,只有P1产品,还要看看P1产品的数量是否到达了i-1,如果已经到达了i-1,也不能放P1了.而对于产品P2,则要

看是否有P1产品,是否数量达到了k-1.

 

    尽管还是没有看出同步该有的协作,但是对于P1,P2产品应该用两个信号量S1,S2初始值分别为k-1和i-1,表示P1产品的

数量,和P2产品的数量.每次放入一个P1产品,就P(S1)减少一个资源.P2同理.

    

    而互斥信号量,就是表示这个放了P1不能放P2,放了P2不能放P1.它的初值为1,放了P1之后,变为0,P2不能放,没资源了;

或者放了P2之后变为0,P1不能放了.

 

    所以同步为2,互斥为1;同步的初始值为i-1,k-1;互斥的初始值为1.答案为:CBDA.

    

    PS:这道题,不是同步是表示协作的,到现在也没看出来协作.

    

    前两道题,我或多或少看过解析,知道一点内幕.下面这道我是真的不知道,尽管也做过,但是解析忘光了.

我的解析

    对于信号量S1,S2初始值为2,1.因为发货员2名,审核员1名.可以解释为S1还有2个资源,一个发货员也没有被占用;S2还有1

个资源,1个审核员也没有被占用.而且由于有2个信号量,我初步猜测是同步的系统.


   看图分析,首先顾客要进入仓库提货,发货员要空闲,发货员空闲,才能进入提货.进入仓库后,在仓库提货,然后要离开,离开

的时候,审查员只有一个,只有他空闲了,才可以来检查顾客的提货是否正确,然后检验,检验完了,就可以走了.但是中间有个d

,应该是要释放资源.释放什么呢?等会再说.

    所以a应该是P(S1),申请要一个发货员,P(S1)=S1-1=2-1=1>0,所以可以要到发货员.然后提货了,提完货了.可以释放发货员

了吗,还是只有最后顾客离开仓库,才能释放.先假设现在就放了,V(S1)=S1+1=1+1=2>0,有2个空闲的发货员,其他客户可以

随时进来.然后得申请一个审核员检查货物,P(S2)=S2-1=1-1=0,其他人不能用审核员了,没资源了.检查完了,得释放审核员了

V(S2)=S2+1=0+1=1>0,审核员可以继续为其他顾客效力了.所以这种假设是正确的,如果最后再放发货员,那么申请了审核

员,检查完之后,什么时候释放审核员资源呢?


所以abcd,应该是P(S1),V(S1),P(S2),V(S2).答案AC.

    以上就提了三道比较早的软考题吧,尽管题有些早,但是不妨碍我之前不会,现在会.

最后总述

最后:总算写完了,理解也真是不容易啊.中间有部分理解错误的,本来可以直接写对的,但是想想既然是学习,那么错误和正

确的都应该存在,要不然我还得改原来的博客,删删改改多麻烦,还不如留着,看看当时是怎么想的,为什么会错呢,错在哪呢.

说不定以后会发现即使现在以为对的,也可能是错的.我们开始对修改封闭,对扩展开放吧.

 

最后加个时间戳,纪念下我的学习.  

---2013/10/13 19:48


推荐阅读
author-avatar
望天打股
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有