锁机制:
基本原理:
1.设置一个标志S:
表明临界资源,“可有” 还是 “不可用”
2.进入临界区之前检查标志是否“可用”:
如为不可用:进程在临界区之外等待
如为可用:
访问临界资源
将标志修改为可用
3.退出临界区的时候标志修改为可用
上锁操作: //通过原语实现
1.检测锁的状态
2.如果S为0就回到第一步
3.如果S=1,则设置为0
LOCK(S)
{
test:if(s==0)
goto test: //回到测试锁标志
else //s==1
{
S=0;
}
}
开锁操作://使用原语来实现
1.
把锁状态变成1
Unlock(S)
{
S=1
}
使用锁机制来访问临界区:
1.初始化锁的状态 S=1
2.进入临界区之前执行上锁LOCK
3.离开临界区之后执行开锁Unlock操作