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


推荐阅读
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 解决PHP与MySQL连接时出现500错误的方法
    本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ... [详细]
  • Java内存管理与优化:自动与手动释放策略
    本文深入探讨了Java中的内存管理机制,包括自动垃圾回收和手动释放内存的方法。通过理解这些机制,开发者可以更好地优化程序性能并避免内存泄漏。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 尽管某些细分市场如WAN优化表现不佳,但全球运营商路由器和交换机市场持续增长。根据最新研究,该市场预计在2023年达到202亿美元的规模。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文探讨了如何在编程中正确处理包含空数组的 JSON 对象,提供了详细的代码示例和解决方案。 ... [详细]
  • Ralph的Kubernetes进阶之旅:集群架构与对象解析
    本文深入探讨了Kubernetes集群的架构和核心对象,详细介绍了Pod、Service、Volume等基本组件,以及更高层次的抽象如Deployment、StatefulSet等,帮助读者全面理解Kubernetes的工作原理。 ... [详细]
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社区 版权所有