陈斌彬的技术博客

Stay foolish,stay hungry

进程通信之PV操作

荷兰学者与1956年提出的信号量机制是一种有效的进程同步于互斥工具。

信号量S的物理定义:若S>=0,表示某资源的可用数;若S<0,则其绝对值表示阻塞队列中等待该资源的进程数。

PV操作是实现进程同步与互斥的常用方法。P操作和V操作是低级通信原语,在执行期间不可分割。其中P操作表示申请一个资源,V操作表示释放一个资源。

P操作定义:S:=S-1,若S>=0,则执行P操作的进程继续执行;若S<0,则置该进程为阻塞状态(因无可用资源),并将其插入阻塞队列。P操作可用如下过程表示,其中 Semaphore表示所定义的变量是信号量。

Procedure  P(Var S:Semaphore)
    Begin
       S:=S-1;
       If S<0 then W(S)       {执行P操作的进程插入等待队列}
    End;

V操作的定义:S:S+1,若S>0,则执行V操作的进程继续执行;若S<=0,则从阻塞队列唤醒一个进程,并将其插入就绪队列,然后执行V操作的进程继续执行。V操作可用如下过程表示:

Procedure  V(Var S:Semaphore)
    Begin
       S:=S+1;
       If S<=0 then R(S)       {从阻塞队列中唤醒一个进程}
    End;