为什么引入信号量
- 因为之前我们不管是软件还是硬件都无法全满足那四个条件 满则等待 空闲让进 让权等待 有限等待 所以用了信号量来实现进程同步和互斥的方法
什么是信号量机制
- 用户进程可以通过操作系统提供的一对原语来队信号量操作,来实现进程互斥和进程同步
- wait(S)原语 也称P操作
- signal(S)原语 也称V操作
整型信号量
- 用一个整数型的变量作为信号量,用来表示系统中的某种资源的数量
- 因为p v 操作是原子性的,所以避免了并发和异步导致的问题
- wait是通过轮询来检查资源是否足够 我们通过比较s的值是否小于等于0 信号量值是一个共享变量 轮询这种运算,就是CPU一直在允许却没干正事
- signal操作就是直接将资源数加1
- 但是整型信号量是不满足让权等待的原则
记录型信号量
- 记录型信号量是为了解决忙等的情况,也就是满足让权等待
- 通过我们的block 和 wakeup进行线程的阻塞
- 所谓记录型中有一个等待队列
- wait操作 就是将对应的信号量减1,如果资源数小于0,说明资源不够,那么就将这个线程阻塞
- signal操作 先将对应的信号量加1,释放资源之后,若资源数小于等于0,说明是有线程在等待这个资源,就将等待队列中的一个进程唤醒,变成就绪态