最近在重新学习计算机基础知识,这两天学到了PV操作,看了一些文章才理解其含义,遂记录下来,如有错误欢迎指正。
什么是PV操作?
PV操作主要就是P操作、V操作和信号量。
信号量
理解PV操作先得理解信号量不同值时的含义,信号量的值表示相应资源的使用情况。
- S > 0时,表示可用的临界资源数;
- S < 0时,表示正在等待临界资源被阻塞的进程数;
- S = 0时,表示临界资源正好用完。
P操作
P操作一般写为P(S),P(S)的含义其实就是申请(占用)资源。
- S-1;
(申请一个资源) - 若 S-1 后结果 >=0,则进程继续执行;
(还有资源,继续执行) - 若 S-1 后结果 <0,则该进程被阻塞后放入等待该临界资源的等待队列中。
(没有资源了,阻塞放入等待队列)
V操作
V操作一般写为V(S),V(S)的含义其实就是释放资源。
- S+1;
(释放一个资源) - 若 S+1 后结果 >0,则进程继续执行;
(没有正在等待资源的进程,继续执行) - 若 S+1 后结果 <=0,则从该信号的等待队列中释放一个等待进程。
(释放一个资源后 S<=0 表示还有进程在等待该资源,于是释放一个等待进程)
注意:等于0与前面说的信号量等于0时的含义不一样,因为此处是+1后=0,表示S本来是 <0。