同步基本命令

作为解决并行过程中相互排除或同步问题的基本命令的代表,有用sethaphore的P命令,V命令。所谓semaphore是指过去在铁路中使用的信号杆式的信号机,但在这里,说的是为了取得同步而用的整数形的公用变量。P命令,V命令是控制semaphore值的基本命令,对同样的semaphore,结构上保证同时只有一个能够执行。即对某个semaphore,只要一开始执行P命令或V命令,则对于其它过程中周样的semaphoresi的P,V命令,一定要等到执行中的P或V命令结束为止。我们把semaphores的

P,V命令分别表示P(s),V(s)。P(s)和V(s)具有如下定义:

P(8)semaphores值减1.如果;的结果为负值的话,则发出这个命令的执行过程在此结束。如果s的值为非负的话,则执行这个命令的过程继续进行。

V(s).semaphores值加1,如果对于s执行P命令后,有等待过程的话,则从其中仅选一个再开始执行。如果没有等待过程,则不再进行其它工作而让该命令结束。

如果采用P命令及V命令的话,则相互排除问题和同步问题都容易得到解决。

关于前例,我们试图采用P,V命令求解一下相互排除问题(图5.15)。首先,对于临界区域D分配semaphored.在并行动作的各过程中,将对D进行存取的部分用下列的P(d)和V(d)圈起。于是过程A,B的程序变成如下形式:

过程A:;P(d);数据D的更新;V(d);……

过程B:;P(d);数据D的读取;V(d);

捕获.JPG

设对于临界区域D的semaphored的初始值为1,我们来确认一下,上面的程序实现相互排除的作用。现在假定过程A先执行了

P(d)命令,根据P命令的定义,d=1—1=0.因为d值非负,

所以过程A继续执行,数据D的更新开始。假定此时过程B执行了P命令,根据P命令的执行,d0—1--1。因为d值变负,所以执行P命令的过程B被休止。若过程A结束数据的更新,

并执行了·V(d)命令的话,则根据定义,d-—1+1=0.对于

semaphored,因为过程B正处于休止中,所以它的执行再度开始,并开始数据D的读取。读取结束后,若执行V(d)命令,则

d=0+1=1。此时,对于senaphord,因为没有正在休止中的过程,所以,不再进行其它工作,V命令结束。假定在过程B中的

数据读取结束之前,过程A再次被启动,执行了P(d)命令。这时,d-0—1-—1,因为d为负。所以执行这个P命令之后,过程A休止,一直到过程B的V命令被执行之前,数据的更新暂不进行。这样就可以保证共有的临界区域D,只能同时从一个过程进行存取。

下面我们试图再用P,V命令求解一下并行过程中的同步问题(图5.16).仍用前例,我们考虑用m₁,n₂作为表示过程M₁和N₂结束的semaphore,并设其初始值皆为0.为了取得过程M和N的同步,插入如下P,V命令。

捕获.JPG

过程M:…;过程M₁;V(m₁);P(n₂);过程M₂;…

过程N:…;过程N₁;P(m₁);过程N₂;V(n₂);中过程M,N进行并行动作。现在,我们认为过程N₁比M₁先结束,并执行了P(m₁)。根据P(m₁),因为m=0一1--1<0,所以执行这个P命令后的过程N被休止。若过程M₁结東,V(m)被执行的话,m₁=—1+1=0,则对于semaphoremi,正处于休止中的过程N将再度开始执行。过程M虽然继续执行P(n₂),但当它进行的过程比N快时,n一0—1=-1,过程M进入休止状态.过程N再度开始后,执行N₂,进而执行V(n₂)。结果,n-—1+1—0,于是对于semaphorem₁的被休止过程M,再度开始执行。这样一来;过程M和N,根据关于.semaphoremr,#的P,V命令取得同步,即一边取得相互连络,一边进行并行活动。

如上所述,根据利用关于semaphore的P命令,V命令,就可以很好地解决并行过程中相互排除的问题和同步的问题。再有,也常把P(s)命令换写成wait(s),V(s)命令换写成signal(s)为了简单易懂地描述程序,下面我们采用signal(s),wait(s)命令。


随便看看