信号量和PV操作

信号量和PV操作

信号量包括一个整数值和一个等待数列.S.queue,信号量只能通过两个原语P,V操作来访问它,信号量的定义:

 Struct semaphore{

      Int value;

      Struct PCB *queue;

}

P原语所执行的操作可用wait(s)来表示:

Void wait(semaphore s)

{

  s.value=s.value-1;

  if(s.value<0)

     block(s.queue); //进程阻塞,并将其投入等待数列s.queue

 }

V原语所执行的操作可用下面的函数siganl(s)来表示:

Void signal(semaphore s)

{   

   S.value=s.value+1;

   If(s.value<=0)

     Wackup(s.queue);//唤醒阻塞进程,将其从等待队列s.queue取出,投入就绪队列

}

信号量的物理意义:信号量的初值s.value表示系统中某种资源的数目,因而又称为资源信号量

P操作意味着进程请求一个资源,因此描述为s.value=value-1;

V操作意味进程释放一个资源,因此描述为s.value=s.value+1

s.value<0时,| s.value | 表示等待数列的进程数。

你可能感兴趣的:(计算机操作系统)