信号量是操作系统提供的⼀种协调共享资源访问的⽅法。
通常信号量表示资源的数量,对应的变量是⼀个整型( sem )变量。
另外,还有两个原⼦操作的系统调⽤函数来控制信号量的,分别是:
P 操作:将 sem 减 1 ,相减后,如果 sem < 0 ,则进程/线程进⼊阻塞等待,否则继续,表明 P操作可能会阻塞;
V 操作:将 sem 加 1 ,相加后,如果 sem <= 0 ,唤醒⼀个等待中的进程/线程,表明 V 操作不会阻塞;
P 操作是⽤在进⼊临界区之前,V 操作是⽤在离开临界区之后,这两个操作是必须成对出现的。

V原语的主要操作是

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

典型理解偏差

  1. 以V原语的1、2步来做,Sem不就永远大于0,那进程不就一直循环执行成为死循环了?
  2. Sem大于0那就表示有临界资源可供使用,为什么不唤醒进程?
  3. Sem小于0应该是说没有临界资源可供使用,为什么还要唤醒进程?

解析

  1. P操作对sem减1的。P、V原语必须成对使用!从而不会造成死循环。
  2. Sem大于0的确表示有临界资源可供使用,而且这个时候没有进程被阻塞在这个资源上,也就是说没有进程因为得不到这类资源而阻塞,所以没有被阻塞的进程,自然不需要唤醒。
  3. V原语操作的本质在于:一个进程使用完临界资源后,释放临界资源,使Sem加1,以通知其它的进程,这个时候如果Sem<0,表明有进程阻塞在该类资源上,因此要从阻塞队列里唤醒一个进程来“转手”该类资源。 比如,有2个某类资源,三个进程A、B、C、D要用该类资源,最开始Sem=2,当A进入,Sem=1,当B进入Sem=0,表明该类资源刚好用完, 当C进入时Sem=-1,表明有一个进程被阻塞了,D进入,Sem=-2。当A用完该类资源时,进行V操作,Sem=-1,释放该类资源,而这时Sem<0,表明有进程阻塞在该类资源上,于是唤醒一个。

操作系统P/V操作(V操作中的典型理解偏差)相关推荐

  1. @kafkalistener中id的作用_无意中测试了下MySQL里面的join操作,发现还是存在理解偏差...

    在一个很偶然的场景下,我看到了一个关于数据库中间件的SQL测试,对比测试的内容大体是对于一条查询语句的输出.看到输出结果,虽然结果是客观的,但是我总是感觉缺少了些什么,于是做了下测试. 为了简化起见, ...

  2. c语言p,用C语言实现P、V操作

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 操作系统中关于信号量操作的代码示例(Linux+windows) 原文:操作系统中关于信号量操作的代码示例(Linux+windows) 有一个生产者进程 ...

  3. c语言 pv操作,用C语言实现P、V操作

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 操作系统中关于信号量操作的代码示例(Linux+windows) 原文:操作系统中关于信号量操作的代码示例(Linux+windows) 有一个生产者进程 ...

  4. 【操作系统】——PV操作

    大家都说操作系统中的PV操作部分看不懂,确实我在专业课中学习这门课时,PV操作被列为书中的重点和难点,就是因为它不好理解.当时自己听完课也是一头雾水,到期末考试结束,也没弄明白这是怎么一回事,更没有意 ...

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

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

  6. C语言实现操作系统简单的P V操作

    C语言实现操作系统简单的P V操作 简单说明 cpp的文件,C语言的语法 代码如下 实现效果 简单说明 cpp的文件,C语言的语法 代码如下 #include "stdio.h" ...

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

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

  8. 操作系统中的信号量及P、V操作

    系统中应该有解决进程同步的一种专门机制.实际上,同步是并发进程之间在执行时序 上的一种相互制约的关系.进程互斥的实质也是同步,可把进程互斥看作是一种特殊的进程同步. 同步机制应该满足如下一些基本要求. ...

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

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

最新文章

  1. linux mysql 数据目录迁移后不生效_mysql 本地数据目录迁移
  2. 聊聊springboot elasticsearch healthIndicator
  3. 关于MATLAB中xlswrite函数写数据出现服务器异常情况的解决办法
  4. NIO详解(十):FileChannel零拷贝技术
  5. 终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
  6. Linux 下, npm i 老是被killed 已杀死
  7. MyEclipse用(JDBC)连接SQL出现的问题~
  8. 微软职位内部推荐-Senior Engineering Lead
  9. 213.打家劫舍II
  10. php mysqli 字段缺失,mysqli 为什么不提示字段异常
  11. handlersocket mysql_Mysql插件之HandlerSocket的安装、配置、使用
  12. YoloV3 先验框
  13. 【游戏开发实战】Unity 2D游戏手指控制移动摄像机镜头和双指缩放镜头(愤怒的小鸟为例)
  14. 多项式展开的逆过程的MATLAB实现
  15. 反应器(Reactor)模式
  16. 删除xx天之前的文件夹python
  17. 星际争霸 2 快捷键
  18. 第一个安卓应用小程序--浅浅仿照微信发现界面
  19. powershell 报错 0xffff0000 的解决方法
  20. 美团活动又来了|0.98充10元话费,秒到账,不实名不绑卡,超简单!

热门文章

  1. 棋牌游戏开发不可缺少的四大技术支持
  2. win10自带sftp服务器_高手亲自解决win10系统下怎么使用OpenSSH设置SFTP服务器的完全操作办法...
  3. 游戏策划学习(二)---游戏策划与开发方法---常见的游戏类型
  4. JavaScript中栈内存与堆内存分别是什么?
  5. 计算机音乐作曲专业,计算机音乐创作专业组
  6. 曾经排名第一的安全软件,为啥会变成流氓软件?
  7. 原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (六)测试哪些内容:Right-BICEP
  8. Iceberg在袋鼠云的探索及实践
  9. JavaExcel模板下载(多sheet)
  10. .x3m勒索病毒怎么处理 phobos勒索病毒恢复成功 百分百解密sql文件恢复