这几天,陆续有那么三两个同学跟我讨论了一下关于软考上的PV操作的题,吾虽不才,但还是把同学们讲通了,在此,特分享一下自己的思路和想法,愿对大家有点帮助!

下面,我们就通过自己做过的试卷上两道题来分析:

N1:

相信大家对这道题不陌生吧,有几个人栽在这上面了?首先这是一个同步问题!

现在我们把它转化一下:

其实吧,很多人是栽在这上面了,因为他们把S1,S2,S3,S4这几个信号量和P1,P2,P3,P4过分的联系起来了,想成是谁释放出来,通知谁的!其实思路是对的,但是核心弄错了,其实,S1,S2,S3,S4和P1,P2,P3,P4在这个标号方面是没有联系的,他只是表示了一个顺序!

接下来,在们就按照这张图分析一下:

1.        首先,P1执行完了之后,会释放出两个信号量来,通知P2、P3,释放的是哪两个信号量呢?就是从1开              始标号的信号量,所以是S1,S2.  (V(S1)V(S2))

2.        P2在开始执行之前,首先要判断一下由P1传过来的信号量到位没有?(P(S1))

3.        P2执行完了之后,会释放出一个信号量来通知P3可以开始了(V(S3))

4.        P3开始之前,由图知道,P3要接收到两个信号才会开始,分别是P1和P2,所以,他就会判断一下来自P2            的信号量S3和来自P1的信号量S2到位没有?(P(S2)P(S3))

5.        P3执行过后,会释放出一个信号量S4来通知P4可以开始了.(V(S4))

6.        P4在执行之前,先判断来自P3的信号量到位没有?(P(S4))

7.        P4执行,本题结束

如果这样一步步去分析,很简单,也很明了.

N2:

有了上面的经验,一看,这个so简单!

来,大家一起分析这张图:

1.      首先,P1执行完之后,会释放出一个信号量来通知P2可以开始。(V(S1))

2.      P2开始执行之前,先判断来自P1的信号到位没有?(P(S1))

3.      P2执行完了之后,会发出两个信号来分别通知P4和P3。(V(S3)V(S2))

4.      在P3开始执行之前,判断来自P2的信号通知到位没有。(P(S2))

5.      P3执行完成了之后,释放信号S4去通知P5,P3已完成,给你资源。(V(S4))

6.      P4,同P3

7.      P5,大家自己想吧!

然后,这样类型的题基本上就解决了。希望对大家有所帮助!   软考加油!

最新文章

  1. ArrayAdapter
  2. Android Builder模式在开发中的应用
  3. zip函数
  4. 【边做项目边学Android】小白会遇到的问题--This Android SDK requires Android Developer Toolkit version 23.0.0 or above
  5. Android子线程更新主界面
  6. Linux实现SSH无密码登录(对目录权限的设置非常详细,可以参考一下)
  7. LR实战之Discuz开源论坛——安装及简介
  8. opnet点对点通信模型 分类: opnet 2014-05-26 22:15 246人阅读 评论(3) 收藏
  9. FPGA IN 金融领域
  10. 分享一小坑(与swagger有关),以后碰到了可以快速规避
  11. if(/专线$/.test(name))讲解
  12. python联系-迭代器
  13. HBuilder 模拟器
  14. C#操作MySQL的类
  15. WebService CXF知识总结
  16. 51Nod1518 稳定多米诺覆盖 动态规划 插头dp 容斥原理
  17. Android中,如何提升Layout的性能?
  18. matlab中如何将视频保存成图像
  19. 坦克大战java版
  20. 简单选择排序(js版)

热门文章

  1. volley post非json格式数据并获取json数据
  2. NSIS脚本入门和进阶方法
  3. zju3547
  4. Codeforces 55D
  5. linux日常小坑
  6. Zookeeper服务常用的操作命令
  7. 【hiho一下第77周】递归-减而治之 (MS面试题:Koch Snowflake)
  8. ffmpeg-20160508-git-bin
  9. 【转】Java-----jar反编译修改重新打包
  10. 用 get 同步/异步 方式获取网络数据并输出