Appearance
2.12 同步互斥概念
一、相关的关键概念
临界资源
- 一次仅允许一个进程访问的资源为临界资源
临界区(critical section)
- 把在每个进程中访问临界资源的那段代码称为临界区
- 代码作为一个共享资源,一次只能允许一个进程访问
死锁
- 两个或两个以上的进程相互等待导致都不能执行
互斥
- 当一个进程在临界访问共享资源时,其他进程不能进入该临界区访问共享资源
竞争
- 多个进程读写一个共享变量,该变量的最终值依赖它们执行的相对速度
饥饿
- 一个进程已经完全具备了执行条件,但是得不到CPU资源
二、进程并发导致的问题
进程的并发会导致程序执行结果不封闭
- 全局资源:对全局资源的访问秩序非常重要
- 资源分配:不好的分配算法可能导致死锁
为了实现对临界资源的访问,每个进程都互斥地进入自己的临界区:一次只有一个程序在临界区。
- 在进入临界区之前,对预先访问的临界资源进行检查
- 若该资源尚未被访问,则可以进入临界区;反之则不能
- 设置正在访问标志
- 访问结束后将资源恢复为未访问标志
三、互斥可能带来的问题
- 死锁
- 进程P1占有资源R1,等待资源R2;进程P2占有资源R2,等待资源R1
- 饥饿
- 无限期地被推迟访问
四、同步机制遵循的准则
空闲让进。当没有进程处于临界区时,可以允许一个请求进入临界区的进程立即进入自己的临界区。
忙则等待。当已有进程进入其临界区时,其他试图进入临界区的进程必须等待。
有限等待。对要求访问临界资源的进程,应该保证能在有限时间内进入自己的临界区。
让权等待。当进程不能进入自己的临界区时,应释放处理机。
五、如何实现互斥访问
严格轮换:每个进程每次都从头执行到尾
屏蔽中断:刚刚进入临界区时就屏蔽中断,刚要出临界区就打开中断
专用机器指令:
test_and_set
、test_and_clear
软件方法
信号量