这是一道选择题,答案是:(设,收银员和顾客的私有信号量为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