P-V操作定义:

假设sem是个整型变量。
P原语的主要操作是:

(1)sem减1;

(2)若sem减1后仍大于或等于零,则该进程继续执行;

(3)若sem减1后小于零,则该进程被阻塞,在相应队列中排队,然后转向系统的进程调度。

V原语的主要操作是:

(1)sem加1;

(2)若相加结果大于零,则进程继续执行;

(3)若相加结果小于或等于零,则唤醒一阻塞在该信号量上的进程,然后再返回原进程继续执行或转进程调度。

我原先对于PV操作的概念很模糊,就知道  P操作是减法运算(S:=S-1),当信号量S小于0时申请资源;V操作是加法运算(S:=+1),当信号量小于等于0时释放资源;P、V操作二者必须成对出现。
但是关于具体含义,我是一点也不清楚。但是昨晚经过我们讨论后,我对其中原理的理解渐渐的就理解了,但是同样往更深层次的理解要求也就更深了,我这样,别人也一样!
这就是为什么后来小组讨论进入了最后一个也是最有争议的一点(只要明白了这一点,PV操作就全部明白了),如下图:
【b1:V(S1);b2:P(S2);c1:P(S1);c2:V(S2);S1=0;S2=0】
争议的地方是:执行到V(S1)时,唤醒收银员进程执行P(S1),那么此时顾客进程是否还继续执行呢?换句换说唤醒收银员进程到底是怎么唤醒的。
其实我认为最为正确的PV原理解释是(如果有不对的地方可以及时提出):
顾客进程与收银员进程由于是同步关系,所以二者进程其实在一开始就并发执行,收银员进程执行到P(S1)时,由于S=S-1,S1得-1,所以等待,顾客进程执行到V(S1)时此时由于S1为-1,经S=S+1计算S1为0,所以唤醒收银员进程P(S1),此时顾客进程是继续进行的,执行到P(S2)时,S2经计算得-1,所以等待,收银员进程执行到V(S2)时,S2经计算得0,所以唤醒顾客进程,收银员进程继续执行,执行到P(S1)时,由于S1经计算得-1,所以等待,而此时顾客进程执行完毕离开超市。
其实蓝字部分还有一种可能,就是唤醒收银员进程后,收银员进程首先进行到V(S2)【比顾客进程到达P(S2)早】,其实最终结果是不会变的,V(S2)经过计算此时为1,所以继续执行,执行到P(S1),可此S1经计算为-1,所以等待,而顾客进程执行到P(S2)时,S2经过计算为0,所以继续执行,最终离开超市。
通过以上我们可以看出,站在不同角度分析,就会有多种解释的方法,这也是造成我们产生歧义的主要原因,就是谁说的都对,最终结果都一样,但是到底谁才是真理呢?我猜想,大家的猜想是把所有的可能都包含在内了,但是我们不明白,所以总认为有一方是错的,其实谁的解释都是正确的。
基本类型的变量如果是临时变量,只要定义了,就会分配内存空间,不管是否被赋值;如果是作为对象的属性出现,只要该对象不实例化,就不会分配内存空间。

一个完整的Java程序运行过程会涉及以下内存区域:1、寄存器:JVM内部虚拟寄存器,存取速度非常快,程序不可控制。2、 栈:保存局部变量的值,包括:    1)用来保存基本数据类型的值;    2)保存类的实例,即堆区对象的引用(指针)    3)也可以用来保存加载方法时的帧3、堆:用来存放动态产生的数据,比如new出来的对象。注意创建出来的对象只包含属于各自的成员变量,并不包括成员方法。因为同一个类的对象拥有各自的成员变量,存储在各自的堆中,但是他们共享该类的方法,并不是每创建一个对象就把成员方法复制一次。

4、常量池:JVM为每个已加载的类型维护一个常量池,常量池就是这个类型用到的常量的一个有序集合。包括直接常量(基本类型,String)和对其他类型、方法、字段的符号引用(1)。池中的数据和数组一样通过索引访问。由于常量池包含了一个类型所有的对其他类型、方法、字段的符号引用,所以常量池在Java的动态链接中起了核心作用。常量池存在于堆中。

5、代码段:用来存放从硬盘上读取的源程序代码。6、数据段:用来存放static定义的静态成员。

转载于:https://www.cnblogs.com/linkzijun/p/6018152.html

关于P,V操作理解的分析相关推荐

  1. 操作系统P/V操作(V操作中的典型理解偏差)

    信号量是操作系统提供的⼀种协调共享资源访问的⽅法. 通常信号量表示资源的数量,对应的变量是⼀个整型( sem )变量. 另外,还有两个原⼦操作的系统调⽤函数来控制信号量的,分别是: P 操作:将 se ...

  2. 关于p操作和v操作的理解

    操作系统之PV操作 今天在做操作系统老师布置的操作系统作业,但是碰到了一个有关pv操作的问题,由于对pv操作的理解不是很透彻,所以我查阅了很多资料,下面来简单的通俗的介绍一下pv操作 1.信号量    ...

  3. 对于p、v 操作的理解

    p.v 操作的实现 数据结构 typedef struct {int value; // 可用资源数量struct PCB *list; // 等待pcb队列 }semaphore; p 操作 voi ...

  4. 操作系统信号量与P、V操作 初步认识整理

    初步接触,若有不足之处,请各位不吝赐教.谢谢! 首先介绍:信号量 信号量包括整型信号量.结构型信号量.二值信号量. ① 整型信号量 最初,将信号量定义为一个共享的整型量,它保存可供使用的唤醒数目.如果 ...

  5. 操作系统-------用P,V操作解决生产者和消费者问题(详解!!!)

    问题:         系统中有一组生产者进程和一组消费者进程,生产者每次生产一个产品放入缓冲区,消费者每次从缓冲区取出一个产品并使用(注:这里的产品可以理解成某种数据). 条件:生产者.消费者共享一 ...

  6. 图解操作系统之p,v操作

    操作系统之p,v操作 计算机的核心是CPU,它承担了所有的计算任务:而操作系统是计算机的管理者,它负责任务的调度.资源的分配和管理,统领整个计算机硬件. 一.操作系统的相关定义 1.操作系统的定义: ...

  7. 操作系统P,V操作大总结(包含例题)上篇

    引言:P,V操作必须成对出现,P可简单的理解为消耗一种资源,V可简单的理解为增加一种资源. 1.用信号量实现互斥 semaphore S=1;//定义一个互斥信号量 P1(){ P(S)://加锁 进 ...

  8. vp操作 信号量_信号量P,V操作

    2013-07-22 20:20:30 信号量是最早出现的用来解决进程同步与互斥问题的机制(也可实现进程通信),包括一个称为信 号量的变量及对它进行的两个原语操作.信号量为一个整数,我们设这个信号量为 ...

  9. 从操作系统的PV操作理解JAVA的synchronized同步方法,同步代码块实现,及比较

    也有利于理解操作系统的同步 知识果然是息息相关的 JAVA同样离不开操作系统的原理,不过他体现在虚拟机JVM中 synchronized关键字是同步关键字 首先我们知道在操作系统里 PV两者操作信息量 ...

最新文章

  1. [翻译]ASP.NET AJAX与SharePoint的集成
  2. 精准扶贫探索新融合模式-农业大健康·李龙:谋定乡村振兴
  3. Web前端培训:有哪些好用的前端开发工具呢?
  4. kickstart及引导镜像制作
  5. Maven添加Oracle驱动及依赖
  6. mysql 显示右边所有名称_查询表 - [ MySql参考手册 ] - 在线原生手册 - php中文网
  7. 网络管理员考试案例梳理、真题透解与强化训练
  8. Hive中类SQL语言中的where 与having
  9. Windows驱动开发技术详解——经典书评
  10. apk改之理安装教程
  11. html遮罩层样式,遮罩层样式
  12. EPP-域名映射(RFC5731翻译)
  13. C语言高级教程-C语言数组(六):变长数组
  14. java文件后缀_java源文件名的后缀是什么?
  15. 11个免费的Web安全测试工具
  16. 2019最实用的8种精准微信引流方法教程
  17. 华中科技大学计算机与网络,华中科技大学计算机通信与网络实验报告-基于NS2的协议分析实验...
  18. ipconfig 无效
  19. Linux中安装数据库
  20. {resCode:111111,resText:FAILURE}

热门文章

  1. python里eval和input组合使用_python中eval()函数和input()函数用法解析
  2. 华三防火墙配置端口地址转换_H3C防火墙配置命令
  3. 鸿蒙OS比fuchsia的优势,第一天带你走进华为开发者大会,了解鸿蒙OS
  4. java的字符串池_翻译-Java字符串池
  5. linux基本命令示例_Linux mv命令用法和示例
  6. python深复制浅复制_Python复制–深层复制
  7. java数组实现队列_使用数组在Java中进行队列实现
  8. VS2022找不到Microsoft.Expression.Interactions.dll
  9. C++教程:C++开发语言可以做些什么?
  10. vue2.x 给一个对象里添加一个没有的属性