软测试综述——PV操作

软测试综述——PV操作

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。



   

    在操作系统中,进程之间常常会存在相互排斥(都须要共享独占性资源时)和同步(完毕异步的两个进程的协作)两种关系。而信号量和PV操作完美有效的处理了这两种情况。

 

    相互排斥:就好比过独木桥,一次仅仅能运行一个进程。

    同步:好比一个人骑车一个人步行,两方协作完毕一件事情,速度快的每过一段时间就停下来等等速度慢的



    信号量是一种特殊的变量。表现形式是一个整型S和一个队列,依据控制对象的不同被赋予不同的值。分为下面两类:

    1,公用信号量。实现进程间的相互排斥,初值为1或资源的数目,

    2,私用信号量。实现进程间的同步,初值为0或某个正整数。

 

        S的物理意义:S>=0表示某资源的可用数。若S<0,则其绝对值表示堵塞队列中等待该资源的进程数。

 

         P操作:也称为down()wait()操作,使S=S-1。若S<0,进程暂停运行。放入信号量的等待队列。表示申请一个资源。

 

        V操作:也称为up()signal()操作。使S=S+1,S<=0,唤醒等待队列中的一个进程。表示释放一个资源。

 

利用PV操作实现进程的相互排斥


    令信号量S的初值为1,当进入临界区时运行P操作,退出临界区时运行V操作。这样,利用PV操作实现进程相互排斥的代码例如以下:

P(S)

   临界区

V(S)

 

利用PV操作实现进程的同步


    令信号量S的初值为0。进程A在进程B到达L2曾经。不应前进到超过点L1

             进程A                       进程B

                                       

L1:P(S)                       L2: V(S)

                                   


    当进程A先运行到L1时,运行完P操作后,信号量S=S-1<0,停止运行。直到进程B运行到L2时,信号量S=S+1=1。唤醒进程A继续运行。

达到了同步的目的。

 



最后通过一个实例分析来巩固一下


    比如。某仓库有一名保管员。该仓库可存放n箱零件。

现有m名工人。仅仅要仓库空暇。工人就可以将生产好的零件放入仓库。并由保管员登记入库数量。另外有k名销售员,仅仅要仓库的零件数满足顾客要求,便可提货并由保管员登记出库数量。

   规定:工人和销售员不能同一时候进入仓库,可是工人和工人,销售员和销售员能够同一时候进入仓库。设置信号量S1,初值为n,表示仓库空暇位置数;信号量S2。初值为0,表示仓库中零件箱数;信号量S3,初值为1,用于实现对保管员的相互排斥訪问。

则其管理系统流程图例如以下:

       

      软测试综述——PV操作


    对于工人进程,首先运行P(S1)申请资源。看仓库中是否有空暇位置。

若有,则将零件送入仓库。然后运行V(S2)表明仓库中已经有一箱零件,唤醒销售员进程,告知销售员能够提货了。然后运行PS3)申请资源,看是否有保管员空暇,若有。则登记入库数,然后运行VS3)释放保管员资源,使保管员处于空暇状态。


    对销售员进程,首先运行P(S2)申请资源,看仓库是否有货物,若有,进入仓库提货,然后运行V(S1)释放资源。使仓库空暇出一个位置。告知工人进程能够放置货物了,然后运行P(S3)申请资源,看是否有保管员空暇,若有,则登记出库数,然后运行VS3)释放保管员资源,使保管员处于空暇状态。

 

    通过上述实例可知,在现实生活中相互排斥和同步都是同一时候存在的,两者相辅相成。

 

    关于PV操作,相对来讲在软考的复习内容中是比較生疏的一部分,了解了它是什么,为什么使用它,它有什么长处以后,剩下的就是通过多多的实践练习来加深对理论的理解和吸收了。

 











版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117270.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ResNet解析_restnet

    ResNet解析_restnetResNet在2015年被提出,在ImageNet比赛classification任务上获得第一名,因为它“简单与实用”并存,之后很多方法都建立在ResNet50或者ResNet101的基础上完成的,检测,分割,识别等领域都纷纷使用ResNet,Alphazero也使用了ResNet,所以可见ResNet确实很好用。下面我们从实用的角度去看看ResNet。1.ResNet意义随着…

    2022年10月7日
    0
  • dojo/dom-construct.toDom方法学习笔记

    dojo/dom-construct.toDom方法学习笔记  toDom方法用来将html标签字符串转化成DOM节点。1.7之后toDom方法被分配到了dom-construct模块。require(["dojo/dom-construct"],function(domConstruct){//TakeastringandturnitintoaDOMnodevarnode=domConstruc…

    2022年9月12日
    0
  • html转word java_word转excel排版不变

    html转word java_word转excel排版不变页面:无标题页页面后置文件:usingSystem;usingSystem.Collections;usingSystem.Configuration;usingSystem.Data;usingSystem.Linq;usingSystem.Web;usingSystem.

    2022年8月31日
    0
  • 使用 PyCharm 远程调试 Django 程序「建议收藏」

    使用 PyCharm 远程调试 Django 程序「建议收藏」这阵子组内流行使用Django写管理端程序。大家习惯了在Windows上使用PyCharm等IDE快速方便地进行开发,但是由于管理端使用了一些公司的公共组件,而这些组件又只提供了Linux上的Python接口,因此必须在Linux上运行Django程序。值得庆幸的是,大多数的IDE都提供了远程调试功能,PyCharm也可以经过简单配置进行远程调试。场

    2022年8月28日
    1
  • java 根据“|”分割字符串需要使用“\\|” 双反斜杠做特殊处理

    java 根据“|”分割字符串需要使用“\\|” 双反斜杠做特殊处理java 根据“|”分割字符串需要使用“\\|” 双反斜杠做特殊处理

    2022年4月23日
    313
  • matlab 求矩阵秩,用MATLAB编程求矩阵的秩

    matlab 求矩阵秩,用MATLAB编程求矩阵的秩fori=n:-1:1我明白了,就是极大无关组,我的这个程序把所有的基都写出来了,你只要选一个就可以,还对两种矩形的矩阵(例如2×3,3×2都测试了);如果谁会优化这个程序的会更好!代码如下:ji.m%A=[17241815%23571416%46132022%812264044]A=[1,0,1,2;2,0,2,4;1,-1,1,1…

    2022年5月7日
    69

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号