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

来源:互联网 发布:51单片机入门教程目录 编辑:程序博客网 时间:2024/05/17 08:04

 

 

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

 

 

 

 

 

 

原创粉丝点击