当前位置: 首页 > news >正文

一个PV操作题引发的思考,如何看待进程间同步、互斥

clip_image002

clip_image004

这是一道选择题,答案是:(设,收银员和顾客的私有信号量为S1S2)

aP(Sn) b1V(S1)b2P(S2)c1P(S1)c2 V(S2)

我是这样理解PV定义的,在b1处执行V(S1)操作,那么执行V操作的进程即是私有信号量S1的所有者――收银员进程的,那么此处S1=1 ,进而执行收银员进程。

在这里,对PV定义理解方面我们出现了分歧。

另一组的同学,不太支持这种理解,但当b1出为V(S1)时,S1=1,按照定义则继续执行v操作的进程,即继续执行顾客进程,而非进入到收银员进程中去。这样答案就不成立了.

清楚详细的理解PV操作以及PV之间的临界资源分配,才能使我们更好的、更准确的解决PV操作题。

这样说更容易理解一些,直接将P操作理解为申请资源,V操作理解为释放资源。在b1处释放了资源,那么在c1出申请资源,自然就由顾客进程转到了收银员进程,这样也就达到了同步。但与此同时,也要关注信号量的取值,因为这里需要对信号量的取值进行判断操作的。

关于PV定义的理解分歧,还未解决。希望下次开会能够解决掉,也希望做过路过的盆友们踊跃发言,期待与你们的交流。


************************************ 以下,是我对本篇博客的补充。 ************************************




“三个臭皮匠,顶个诸葛亮” ,这说明群众的智慧是巨大的。


通过浏览同学们的博客,经过多个版本的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,所以等待,而此时顾客进程执行完毕离开超市。

在本文上半部分,我的理论观点是以顾客进程为始,在顾客进程执行过程中,再出发的收银员进程。这样来分析,那么我之前对PV操作的理解就出现了错误。不能按照信号量的所属进程来判断执行PV操作的进程就是该进程。

按照比较说得通的版本来讲,处理这种PV操作题,要清楚题中涉及的进程之间的同时执行的关系。我在看题的过程中忽略了这一点,导致我着重拿着PV定义来啃,深究具体执行PV操作的进程是哪个进程。

问题总是越讨论越清晰的,多探讨很重要,尽量减少”想当然“的次数。

2010-10-12 23:29:12

相关文章:

  • windows中控制台中在同一行打印信息
  • 《Linux内核修炼之道》精华分享与讨论(5)——Kernel地图:Kconfig与Makefile
  • 《Linux内核修炼之道》 之 高效学习Linux驱动开发
  • 《Linux内核修炼之道》 之 高效学习Linux内核
  • 嵌入式系统开发:Arm与Linux的完美结合
  • 浅析如何学习基于ARM平台的嵌入式系统
  • 谢尔宾斯基三角(Sierpinski triangle)的显示 (with OpenGL)
  • 把C++/CLI委托传入本地代码
  • 在win2003下配置ASP.NET 2.0的IIS并用域名发布
  • 在64bit Win7下使用低版本的EW430开发环境
  • 何时使用 FILESTREAM?
  • jsp页面一片空白的两种可能性
  • TCP和UDP在网络层实现的不同--基于linux内核
  • java的static用法
  • UDP_CORK,TCP_CORK以及TCP_NODELAY
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • iOS编译提示和导航提示
  • k个最大的数及变种小结
  • LeetCode算法系列_0891_子序列宽度之和
  • Median of Two Sorted Arrays
  • mongo索引构建
  • Spring Cloud中负载均衡器概览
  • webpack入门学习手记(二)
  • 给github项目添加CI badge
  • 马上搞懂 GeoJSON
  • 数组的操作
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • - 转 Ext2.0 form使用实例
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • RDS-Mysql 物理备份恢复到本地数据库上
  • #pragma multi_compile #pragma shader_feature
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (推荐)叮当——中文语音对话机器人
  • (转) Face-Resources
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net - 类的介绍
  • .net framework 4.0中如何 输出 form 的name属性。
  • .Net 知识杂记
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NetCore部署微服务(二)
  • .NET开发者必备的11款免费工具
  • .NET中两种OCR方式对比
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [2669]2-2 Time类的定义
  • [Angular] 笔记 7:模块
  • [BZOJ 4129]Haruna’s Breakfast(树上带修改莫队)
  • [C# 开发技巧]实现属于自己的截图工具
  • [CISCN2021 Quals]upload(PNG-IDAT块嵌入马)
  • [JDK工具-2] javap 类文件解析工具-帮助理解class文件,了解Java编译器机制
  • [Linux]创建新用户并授予root权限
  • [linux学习]apt-get参数解析