PV操作
PV操作最简单的理解:
比方说我们办公的地点只有一台打印机(资源个数是1),甲同事正在使用它(P操作,占用资源,信号量,这个时候资源个数-1),甲同事使用完了之后,释放打印机资源(V操作,这个时候资源个数+1)。
临界资源:如千军万马过独木桥,其中独木桥就是临界资源。
临界区:访问临界资源的代码段
信号量:我们经常见到的P(S) V(S)中的S就是信号量,也就是说pv操作,操作的是信号量。在这里我们就可以将信号量理解为资源的个数。信号量的取值范围一般是 系统资源个数-——进程数-系统资源个数,如果出现负数,表示当前有几个进程正在排队等待。
PV操作说白了就是两种原子操作的组合,有P操作和V操作。
下面进行详细的解答:
P操作:
(1)将信号量S的值减1,即S=S-1;
(2)如果S>=0,则该进程继续执行;否则该进程置为等待状态。
V操作:
(1)将信号量S的值加1,即S=S+1;
(2)如果S>0该进程继续执行;否则说明有等待队列中有等待进程,需要唤醒等待进程。
注意:单缓存区一次只能缓存一个产品。
说白了P操作就是减操作,V操作就是加操作。也可以理解成:P是加锁操作,V是解锁操作。
答题技巧:
图中有几条箭线,信号量就标注几个,这是答题的技巧,在标注信号量的时候,遵循的规则是:从左到右,从小到大。在设置信号量的时候,还要注意前驱关系,一定要保证自己设置的信号量能够符合前驱关系。
初始进程没有P操作,结束进程没有V操作。
哪个进程开始执行的时候,一定会索要资源,这个时候就会执行P操作。也就是加锁操作。V操作也可以理解为是开锁操作。