一个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

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是一道光_

1分也是爱,鼓励鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值