临界区-锁-的联想模型
爸爸有一个任务是保证冰箱里只有有一包面包  妈妈也有这个任务,保证冰箱里有一包面包
这天,冰箱空了
A.12:00的时候,爸爸去看了冰箱,里面是空的,没有面包(第一层专门放面包)
B.12:05爸爸出门买面包
C.12:06妈妈发现冰箱里没有面包
D.12:07妈妈出门买面包
E.12:10爸爸把买回来的面包放到冰箱里
F.12:15妈妈把买回来的面包放到冰箱
这样的话,冰箱里就会有两包面包了,太多了,要解决这个问题
管家想了一个方法,如果爸爸在处理和冰箱有没有面包相关的事情的时候
妈妈就不准看冰箱第一层,只能先等着,等到爸爸处理结束,妈妈才能看
也就是说 管家在冰箱周围设了一个结界,一旦有人进入结界区域,就自动形成
保护,直到里面的人出来,才能有另一个人进去
---这个时候,结界就是临界区
---临界区是指进程中的一段需要访问共享资源并且当另一个进程处于相应
代码区域时便不会被执行的代码区域
--互斥
当一个进程处于临界区并访问共享资源时,没有其他进程会处于临界区并且
访问任何相同的共享资源
想想一下结界,仙侠剧里的,别人都进不来
test-and-set
--冰箱附近一米圈,管家设了结界,结界上有一个门,
门上还有一个状态说明栏(异世界食堂里那种门) 
门前面有一个守门人,守门人有一个法宝“玲珑锁”,
必须要拿到这个法宝,才能开门进入结界区
(1)如果法宝还在守门人手里,那么就说明结界区里没有人,状态栏为0
(2)如果法宝不在守门人手里,那就说明结界区里有人,状态栏为1
场景1:结界区里没有人在
---lock acquire
爸爸要完成事情,保证冰箱里只有1包面包,于是需要进入冰箱结界区
他走到客厅,先看到了守门人,问他要玲珑锁,
守门人看了门上的状态栏,值为0,于是和爸爸说,
“好的,现在结界区里没有人,玲珑锁给你,赶紧进去干活儿吧”
爸爸拿到玲珑锁,进去干活了,门上的状态栏也从0变成了1
----lock release
过了五分钟,爸爸的事情干完了,开门离开结界区,
然后还是原路返回,又碰到了守门人,就说
“谢谢您,现在我事情干完了,我把锁还给您”
于是现在守门人有了他的锁,门上的状态栏从1变成了0
场景2:当爸爸拿到锁进入结界区以后,妈妈也要完成同样的事情,也需要进入冰箱结界区
妈妈也去找守门人,“守门人,快给我玲珑锁,我要进入冰箱结界区”
守门人看了一下门上的状态栏是1,就说“不行呀夫人,冰箱结界区里现在有人,我的玲珑锁已经给他了”
并且会更新自己的状态栏,原来的值是1,新的值还是1
妈妈说,“好的,那我就在这里等着吧,我会一直问你的,问到你有锁为止,也就是盯着状态栏知道状态栏值变为0”
----妈妈此时处于忙等待状态