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


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 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流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
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社区 版权所有