同步问题
当进程间是相互独立的,程序运行结果是确定的,但进程是协同运行需要访问公共资源的话,可能会由于进程调度产生同步问题,单个进程执行时间是不确定的,执行结果也是不确定的,还很难重现
优点
- 共享资源
- 加速
- 模块化
相关概念
- 临界区:临界区是指进程中的一段需要访问共享资源并且当另一个进程处于相应代码区域时便不会执行的代码区域
- 互斥:当一个进程处于临界区并访问共享资源时,没有其他进程会处于临界区并且访问任何相同的共享资源
- 死锁:两个或以上的进程,在相互等待完成特定的任务,而最终没法将自身任务进行下去
- 饥饿:一个可执行的进程,被调度器持续忽略,以至于虽然处于可执行状态却不被执行
临界区:
- 互斥:同一时间临界区中最多存在一个线程
- progress:如果一个线程想要进入临界区,那么最终他会成功
- 有限等待:如果一个线程i处于入口处,那么在i的请求接受之前,其他线程进去临界区的时间是有限制的
- 无忙等待(可选):如果一个线程 在等待进入临界区,那么在他可以进去之前会被挂起,而不是CPU忙等待
临界区实现方法:
方法1:禁用硬件中断
进入临界区:禁用中断
离开临界区:开启中断
系统线程调度依赖硬件中断,关闭硬件中断意味着没有上下文切换,因此没有并发,因此不存在同步问题
缺点:
- 一旦中断被禁用,线程就无法被停止:整个系统都会为你停下来,可能会导致其他线程处于饥饿状态
- 无法限制相应中断所需时间
- 当存在多个CPU时屏蔽一个CPU中断并不能解决问题