4.4 临界区和锁
4.4.1 临界区与临界资源
- 临界资源:一次只允许一个进程独占访问(使用)的资源
[Critical Resource]
*临界区:进程中访问临界资源的程序段
[Critical Section]
在并发环境下面,多个程序同时使用了同一个全局可见变量,会出现随机的不稳定的结果。
解决方案:程序设定一个特定区域不让两个程序同时进入,只能先后进入。【临界区】【临界资源】
- 临界区访问机制的四个原则:
1.忙则等待
当临界区忙时,其他进程必须在临界区外等待
2.空闲让进
当无进程处于临界区时,任何有权进程可进入临界区
3.有限等待
进程进入临界区的请求应该在有闲时间内得到满足
(思考:临界区设置得大一些好,还是小一些好?应刚好包含临界部分)
4.让权等待。
等待进程放弃CPU(让其他进程有机会得到CPU)
4.4.2 锁机制
基本原理:设置一个“标志”S:
表明临界资源“可用”还是“不可用”?1:0
上锁 进入临界区之前检查标志是否可用:
若为“不可用”状态:进程在临界区之外等待
若为“可用”:
访问临界资源
且将标志修改为“不可用”
开锁 退出临界区时将标志修改为“可用”状态
步骤:
1.初始化锁的状态S = 1(可用)
2.进入临界区之前执行上锁Lock(s)操作;
3.离开临界区之后执行开锁unLock(s) 操作;