进程通常分为就绪、运行和阻塞三个工作状态。三种状态在某些条件下可以转换,三者之间的转换关系如下:

进程三个状态之间的转换就是靠PV操作来控制的。PV操作主要就是P操作、V操作和信号量。其中信号量起到了至关重要的作用。

信号量

信号量是最早出现的用来解决进程同步与互斥问题的机制。

信号量(Saphore)由一个值和一个指针组成,指针指向等待该信号量的进程。信号量的值表示相应资源的使用情况。信号量S>=0时,S表示可用资源的数量。执行一次P操作意味着请求分配一个资源,因此S的值减1;当S<0时,表示已经没有可用资源,S的绝对值表示当前等待该资源的进程数。请求者必须等待其他进程释放该类资源,才能继续运行。而执行一个V操作意味着释放一个资源,因此S的值加1;若S<0,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。

注意,信号量的值只能由PV操作来改变。

关于PV操作容易产生的一些疑问:

1,S大于0那就表示有临界资源可供使用,为什么不唤醒进程?

S大于0的确表示有临界资源可供使用,也就是说这个时候没有进程被阻塞在这个资源上,所以不需要唤醒。

2,S小于0应该是说没有临界资源可供使用,为什么还要唤醒进程?

V原语操作的本质在于:一个进程使用完临界资源后,释放临界资源,使S加1,以通知其它的进程,这个时候如果S<0,表明有进程阻塞在该类资源上,因此要从阻塞队列里唤醒一个进程来“转手”该类资源。比如,有两个某类资源,四个进程A、B、C、D要用该类资源,最开始S=2,当A进入,S=1,当B进入S=0,表明该类资源刚好用完, 当C进入时S=-1,表明有一个进程被阻塞了,D进入,S=-2。当A用完该类资源时,进行V操作,S=-1,释放该类资源,因为S<0,表明有进程阻塞在该类资源上,于是唤醒一个。

3,如果是互斥信号量的话,应该设置信号量S=1,但是当有5个进程都访问的话,最后在该信号量的链表里会有4个在等待,也是说S=-4,那么第一个进程执行了V操作使S加1,释放了资源,下一个应该能够执行,但唤醒的这个进程在执行P操作时因S<0,也还是执行不了,这是怎么回事呢?

当一个进程阻塞了的时候,它已经执行过了P操作,并卡在临界区那个地方。当唤醒它时就立即进入它自己的临界区,并不需要执行P操作了,当执行完了临界区的程序后,就执行V操作。

4,S的绝对值表示等待的进程数,同时又表示临界资源,这到底是怎么回事?

当信号量S小于0时,其绝对值表示系统中因请求该类资源而被阻塞的进程数目.S大于0时表示可用的临界资源数。注意在不同情况下所表达的含义不一样。当等于0时,表示刚好用完。

以上就是我对PV操作的一些肤浅理解,还请多多指教。

java中的pv操作,PV操作简单理解相关推荐

  1. Java中就什么是映射的简单理解

    映射是一种特殊的对应关系. 打个比方,生活中一只箭可以射中一只鸟,也可以射不中,甚至可以射中几只.但是在程序中,这只箭必须射中一只,而且也只能能射中一只. 正常一点的理解就是: 映射就是把两个对象对应 ...

  2. Java从入门到精通——数据库篇之JAVA中的对Oracle数据库操作

    在Java中对Oracle数据库的操作分为两种:一.查询.二.非查询. 下面是我对其进行总结: 一.查询数据 /** * 根据用户代码查询* @param userId* @return 如果存在返回 ...

  3. 第69节:Java中数据库的多表操作

    第69节:Java中数据库的多表操作 前言 学习数据库的多表操作,去电商行业做项目吧!!! 达叔,理工男,简书作者&全栈工程师,感性理性兼备的写作者,个人独立开发者,我相信你也可以!阅读他的文 ...

  4. java mysql单库多表_第69节:Java中数据库的多表操作

    第69节:Java中数据库的多表操作 前言 学习数据库的多表操作,去电商行业做项目吧!!! 达叔,理工男,简书作者&全栈工程师,感性理性兼备的写作者,个人独立开发者,我相信你也可以!阅读他的文 ...

  5. mongo java 注解,在Java中使用Spring Data MongoDB操作Mong | zifangsky的个人博客

    前言:在上一篇文章中(PS:https://www.zifangsky.cn/923.html)我简单介绍了如何在Linux中安装MongoDB以及MongoDB的增删改查等基本命令用法(PS:更多M ...

  6. java识别音调_你如何创建一个音调发生器,其音调可以在java中“实时”或动态地操作?...

    我想在java中制作一个可以实时操作的基本音调生成器(只需开始即可). 我想从简单开始,然后添加更复杂的音色生成和效果,最终形成某种基本的合成器. 我发现a helpful post on this ...

  7. java中的关于super的操作

    因为这里需要用两个类,同时出现在一个框中或报错,所以都写成注释的形式 package day06;public class demo15 {//父类/**public class Person(){p ...

  8. java 中常用框架、intell idea简单使用、爬虫系统

    学习:http://www.ityouknow.com/spring-boot.html http://blog.didispace.com/spring-boot-learning-1/ ***in ...

  9. Java中常见流的分类及简单讲解

    流在Java中是指计算中流动的缓冲区. 从外部设备流向中央处理器的数据流成为"输入流",反之成为"输出流". 字符流和字节流的主要区别: 1.字节流读取的时候, ...

  10. Java中的变量分类_开发简单的Java应用

    第一章 开发简单的Java应用 1.Java语言的技术分类 (1)JavaSE:标准版,开发桌面应用 (2)JavaEE:企业版,Web应用 (3)JavaME:小型版,嵌入式 2.如何开发和运行Ja ...

最新文章

  1. LSTM情感分类问题再战
  2. KEIL MDK LIB库文件的制作
  3. 荣耀手机都不更新鸿蒙系统吗,华为EMUI不会更新了!直接升级鸿蒙系统,荣耀手机也不会放弃...
  4. 【OpenCV3】阈值化操作——cv::threshold()与cv::adaptiveThreshold()详解
  5. windows修改PowerShell(命令提示符)默认中文编码方式
  6. lichee linux nfs,SPI Flash 系统编译
  7. tensorflow loss到多少_tensorflow学习笔记day4
  8. 高性能计算多集群管理平台
  9. 基于visual Studio2013解决面试题之1401冒泡排序
  10. ajax id sort,带有ajax更新的Jqueryui可排序列表
  11. java面经_字节跳动 暑期实习 广告部 后台开发 java 一二面经
  12. Redis开发与运维
  13. win10网络计算机删除,手把手教你彻底删除win10系统自带的微软拼音输入法-网络教程与技术 -亦是美网络...
  14. Ubuntu连接不上网络问题的解决方法
  15. 计算机音乐修炼爱情,林俊杰/于竞超/苏阳/陈蓝杰《修炼爱情 (Live)》[FLAC/MP3-320K]...
  16. 2019不是闰年php代码,2019年是闰年吗,2019年有闰月吗?
  17. CodeForces 140C New Year Snowmen (贪心+优先队列)
  18. 仿钉钉考勤统计页面的日历组件,通过日历展示每日考勤打卡情况,支持在日历上打两种不同类型的点,大致适配各种分辨率效果图
  19. centos7 lvm分区扩容(空间转移,将/home转至/根分区)
  20. 轻量级的肝脏与肝肿瘤 2.5D 分割网络阅读笔记

热门文章

  1. educoder平台哪里有答案_昆山哪里有雅思6分培训中心哪些专业
  2. 苹果新款iPad今开售:内地只有WiFi版 回收价2300
  3. c语言中循环次数的问题,【C语言】循环题目详解
  4. java pmd checkstyle_maven配置pom文件添加PMD检查,添加checkStyle检查,JDepend等检查功能...
  5. 程序员放松的9个好网站推荐
  6. Linux进程信号【信号产生】
  7. SRM-供应商管理系统搭建指南
  8. 大数据背景下高校就业创业教育转型与创新研究(非原创)
  9. OMG,这篇文章帮你轻松搞懂TCP/IP 协议,看不懂 你来找我!
  10. 十大经典的零食你吃过几样