一、临界资源与临界区
临界资源
- 一次只允许一个进程独占访问(使用)的资源
临界区
- 进程中访问临界资源的程序段
访问特点
- 排他性
- 并发进程不能同时进入临界区
设计临界区访问机制的四个原则
忙则等待
- 当临界区忙,其他进程必须在临界区外等待
闲则让进
- 当无进程处于临界区时,任何有权进程可进入临界区
有限等待
- 进程进入临界区的请求应在有闲时间内得到满足
让权等待
- 等待进程放弃CPU(让其他进程有机会得到CPU)
二、锁机制
基本原理
- 设置一个”标志“S:表明临界资源“可用”还是“不可用”
- 进入临界区之前检查标志是否”可用“?
不可用,进程在临界区外等待
可用,访问临界资源,并将标志改为不可用
- 退出临界区时将标志修改为“可用”
上锁操作
步骤:
- 检测锁S的状态
- 如果S=0,则返回第一步,如果S=1,则置为0
LOCK (S)//上锁操作
{
test: if (S==0)
goto test;//测试锁状态
else
S=0;//上锁
}
开锁操作
把锁S的状态置1
UnLock (S)//开锁操作
{
S=1;//开锁
}
用锁机制访问临界区
步骤
- 初始化锁的状态S==1(可用)
- 进入临界区之前执行上锁操作
- 离开临界区之后指向开锁操作