进程互斥的实现方法
单标志法
每个进程进入临界区的权限只能被另一个进程赋予
缺点:违背了”空闲让进“的原则
双标志先检查法
数组中各个元素用来标记各进程进入临界区的意愿
缺陷:因为进程具有并发执行且异步性的特点,因此有可能发生,A进程判断其它进程都没有意愿进入临界区然后自己进入访问临界区的代码,在将自己的意愿设置成想访问临界区之前,发生了中断,进程切换,然后B也能进入将访问临界区的代码。
违背了”忙则等待“原则
Peterson算法
信号量机制
信号量
- 信号量就是一个变量,表示系统中某种资源的数量
这里的变量可以是一个整数,也可以是更复杂的记录型变量 - 用户进程可以通过使用操作系统提供的一对原语来对信号量进行操作
- 一对原语是:wait(S)原语和signal(S)原语,S是信号量 (将此对原语理解为函数)
wait、signal也可以记录为 P(S)、V(S)
整数型信号量
缺点:不满足让权等待的问题
记录型信号量
wait原语的操作
先减一操作,判断是否有资源,有则执行,无则调用block原语进程从运行态进入阻塞态
signal原语的操作
先加一操作,判断是否有资源,有则结束,无则调用wakeup原语唤醒等待队列中的一个进程
信号量实现进程同步
1.设置同步信号量S,初始为0
2.在”前操作“之后执行 V(S)
3.在”后操作“之前执行 P(S)
信号量机制如何实现前驱关系?
1.要为每一对前驱关系各设置一个同步变量
2.在前操作之后相应的同步变量执行V操作
3.在后操作之前相应的同步变量执行P操作
节后思维导图总结
管程
引入管程的目的无非就是要更加方便地实现进程互斥同步