#国庆发生的那些事儿#
- 临界资源: 诸进程间需要互斥方式对其进行共享的资源,如打印机、磁带机等
- 临界区: 每个进程中访问临界资源的那段代码称为临界区
- 信号量: 是一种特殊的变量。
信号量的值与相应资源的使用情况有关:
①: 当信号量的值大于0时,表示当前可用资源的数量
②: 当它的值小于0时,其绝对值表示等待使用该资源的进程个数
注意,信号量的值仅能由PV操作来改变。
P操作:申请资源操作。
P(S): ① 将信号量 S 的值减 1,即 S = S - 1;
② 如果 S >= 0(S = 0时,证明资源的数量已经没有了,但是还是可以执行,因为 S-- 是在此判断之前,到此段临界区时,是还有资源),则该进程继续执行;否则该进程置为等待状态,排入等待队列。
V操作:释放资源操作。
V(S): ① 将信号量 S 的值加 1,即S = S + 1;
② 如果 S > 0(同上,为什么这里 S = 0时不能继续执行呢,因为 已经S++了,但还是等于 0,到此段临界区时,还是没有资源),则该进程继续执行;否则该进程置为等待状态,排入等待队列。
收银员进程 b1 处肯定一开始会阻塞(P),也就是不会去发出收银这个动作,直到有购书者到达付款步骤时,才会释放资源(V)唤醒收银员进程,这一过程的PV操作对应,信号量为同一个。
然后直到收银员完成一系列动作后,购书者才能到达下一步,因此 a2 处会阻塞(P),收银员完成一系列动作,释放资源(V),购书者离开书店,这一过程的PV操作对应,信号量为同一个。