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


推荐阅读
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
  • 使用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系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
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社区 版权所有