用公共厕所蹲坑轻松理解PV操作

- 进程就是急着蹲坑的每个人
- 信号量S代表剩余的闲置坑位,为负数时代表坑位不够也即有人在排队
- 当一个人来到厕所里面,Pronounce(正式宣布)要蹲坑,就相当于执行了P操作,在此之前:
  - 当S>0,代表有空闲坑位,肯定没人排队,于是P操作后S减1,立刻开始蹲坑放大
  - 当S≤0,代表没有空闲坑位,坑位都被占了而且大概率还有人在排队(S<0时),于是P操作后S减1,再急也得乖乖站在旁边排队


- 当一个人从坑位出来,蹲坑放大成功获得胜利Voctory,就相当于执行了V操作,在此之前:
  - 当S>0,代表有空闲坑位,肯定没人排队,于是V操作后S加1,挥挥衣袖潇洒离开
  - 当S≤0,代表没有空闲坑位,坑位都被占了而且大概率还有人在排队(S<0时),于是V操作后S加1,出于人道主义精神,喊一个正在排队的人过来接坑,然后拂衣而去深藏功名

所以一般题目中将V操作作为可以开始的条件,比如进程 2有一个前置进程 1,当进程 1执行完后会跟着一个V操作,让S+1,进程 2执行前执行P操作,观察进程 1执行过没有,也就完成了前置要求,只有执行完进程 1才能执行进程 2

猜你喜欢

转载自blog.csdn.net/m0_68055637/article/details/129907079