热门标签 | 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


推荐阅读
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 热血合击脚本辅助工具及随机数生成器源码分享
    本文分享了一个热血合击脚本辅助工具及随机数生成器源码。游戏脚本能够实现类似真实玩家的操作,但信息量有限且操作不可控。热血合击脚本辅助工具可以帮助玩家自动刷图、换图拉怪等操作,并提供了雷电云手机的扩展服务。此外,还介绍了使用mt_rand函数作为随机数生成器的代码示例。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 分享2款网站程序源码/主题等后门检测工具
    本文介绍了2款用于检测网站程序源码和主题中是否存在后门的工具,分别是WebShellkiller和D盾_Web查杀。WebShellkiller是一款支持webshell和暗链扫描的工具,采用多重检测引擎和智能检测模型,能够更精准地检测出已知和未知的后门文件。D盾_Web查杀则使用自行研发的代码分析引擎,能够分析更为隐藏的WebShell后门行为。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
author-avatar
凰媓_935
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有