信号量

Author : 张一极

18:55-20201030

1.整形变量作为信号量

flag代表当前系统设备数目,仅为可用设备,此时flag如果大于0,则代表当前系统有空闲设备,可以分配给进程使用.

signal作为退出调用的方法,会重置Flag到这个进程调用这个设备之前的数量水平.

那么调用过程就是这样的:

1.首先使用wait(flag)判断是否需要等待

2.接着如果发现需要等待,就继续循环,不断循环直到信号量满足条件跳过循环阶段

3.运行进程代码

4.执行signal函数,重置信号量值回到调用之前

wait原语上锁和检查一气呵成,避免并发

不满足让权等待,进不了临界区,只会不断循环,占用cpu.

2.记录信号量

1.设置初始设备数目

2.使用wait原语

3.每有一个进程使用设备,设备号-1,2->1->0->(-1)->(-2)

4.每次执行signal都会使得value+1,如果此时value依然小于0,将会唤醒挂起队列第一个进程到就绪队列,并且分配给这个进程刚释放的这个设备.

优点 : 不会出现持续等待的情况,进一步提高系统执行效率


End

晚安

19:47-2020-1030