一个PV操作题引发的思考,如何看待进程间同步、互斥
来源:互联网 发布:51单片机入门教程目录 编辑:程序博客网 时间:2024/05/17 08:04
这是一道选择题,答案是:(设,收银员和顾客的私有信号量为S1和S2)
a:P(Sn) ;b1:V(S1);b2:P(S2);c1:P(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
- 一个PV操作题引发的思考,如何看待进程间同步、互斥
- 进程的PV操作及互斥同步实现
- 锁、PV操作、进程互斥与同步的实现
- 用PV操作实现多线程间同步互斥(PV)
- 用PV操作实现多线程间同步互斥(PV)
- 进程同步与互斥(PV操作)
- 进程之同步、互斥PV操作笔记
- pv操作实现多进程同步和互斥
- PV操作——解决进程同步和互斥的机制
- 用PV操作解决进程之间的同步互斥问题
- PV操作、信号量、同步与互斥
- 【软考】PV操作同步互斥
- 如何用PV原语实现进程间的互斥与同步[作者: 致远C ]
- 如何用PV原语实现进程间的互斥与同步- -
- 如何用PV原语实现进程间的互斥与同步(转载)
- 如何用PV原语实现进程间的互斥与同步(转载)
- 为什么pv操作能实现进程的互斥???
- PV操作和信号量机制实现进程同步(对多个临界资源的互斥访问)
- Struts2例子
- Struts2例子
- vi/vim搭建超级c/c++编程环境
- C++虚函数表与对象布局
- 关于扩展Tomcat的Session存取机制的思考
- 一个PV操作题引发的思考,如何看待进程间同步、互斥
- 过滤特定字符的文本框控件开发(具有特定数据类型的TextBox控件开发)
- Delphi try except 与 finally的区别
- ORACLE学习第一课
- How to bind a GridView to a list of multiple types? NHibernate proxy causing problems with databinding [From stack overflow]
- Robocode项目资源
- Conversion Functions
- win7下安装PostgreSQL无服务器问题
- Java中的反射和反射解耦应用