PV操作分为P操作和V操作,是为了解决进程的同步与互斥问题。
P操作:使信号量S=S- 1,若S>=0,则该进程继续执行,否则进程进入等待队列。
V操作:使信号量S=S+1,若S小于等于0,则唤醒等待队列中的一个进程。
例如:
有甲,乙两个资源;A,B,C三个进程。有甲乙两资源,所以信号量S=2。
第一步:当A进程请求使用甲资源,系统进行P操作使S-1,S=2-1=1>=0,甲资源给A使用。
第二布:又当B进程请求使用乙资源,系统进行P操作使S-1,S=1-1=0>=0,乙资源给B使用。
第三步:又当C进程请求使用资源,系统由于甲乙资源还被占用,这时进行P操作使S-1,S=0-1=-1,C进入等待队列。
第四步:当A使用甲资源完毕,系统进行V操作使S+1,S=-1+1=0>=0,则唤醒C使用资源。
1.互斥模型:多个进程(互斥)共享一台打印机。
PV编码为
P(S);
使用打印机;
V(S);
这里由于只有一台打印机 所以S=1。这里的S在一个进程中成对出现就是互斥信号量。
2.同步模型:单仓库、生产者与消费者问题。
生产者生产出商品,放商品进入仓库,消费者进入仓库取商品并消费。这里生存者与消费者并不能同时对仓库进行存取,仓库中有商品消费者才能取,没有商品只能等待,他们之间是间接的制约关系,是同步模型。
设S1为仓库空位,初始S1=1;S2为商品数量,初始无商品S2=0。
PV编码为
生存者:
生产一个产品;
P(S1);
送产品到仓库;
V(S2);
消费者:
P(S2);
从仓库取产品;
V(S1);
消费商品;
在这里S1,S2在两个进程中成对出现,所以它们是同步信号量。
网友评论