原语:不可中断的指令或函数
P操作:P操作是原语操作,其内部过程表示为:
<span style="font-size:18px;">void P(Semaphore s)
{
s--;
if(s < 0)
{
wait(s);//进程调用wait进行自我封锁,转入等待状态
}
}</span>
P操作的含义是将信号量s减去1,如果这时s<0,表示原先s最多是0,已经没有可用资源了,这时候的进程在s信号量上等待,自己进入等待状态。
V操作:也是原语操作,表示为:
<span style="font-size:18px;">void V(Semaphore s)
{
s++;
if(s<= 0)
{
Revoke(s);//该进程担负起唤醒在信号量s上等待的进程
}
}</span>
V操作的含义是将信号量s加上1,如果s<0,表示原先s最多是-1,表示有abs(s)个进程在等待使用该资源。这时候的进程需要唤醒在信号量s上等待的过程