锁的说明-转老杨的
时间:2008-12-09 来源:Coolriver
我们都知道S锁与X锁共有四种组合情况,S-S,S-X,X-S,X-X,在封锁机制的情况下,只有S-S是互容的,其它的三个都是互斥的。我们来假象,为什么会出现这三种情况?在很久很久以前,那时候还没有锁,出现以下的三个场景。
场景1:“写-写”冲突,丢失更新:
老杨有一个账号,里面有100块钱,老叶准备给我存5块,小马哥准备给我存10块。假设如下步骤:
1.老叶来到柜台,说要给老杨存钱,小姑娘1看了下账本,现有100。
2.小马哥来到柜台,说要给老杨存钱,小姑娘2看了下账本,现有100。
3.老叶存了5块,小姑娘1大笔一画(写操作),老杨的帐户上有了105.
4.小马哥存了10块,小姑娘2算了一下,100+10等于110,于是老杨的账号更新为110块(写操作)。
因此,钱蒸发了5块,原因是后一次写覆盖了前一次写。这种情况是:丢失更新。
场景2:“写-读”冲突,读脏:
老杨要泡老婆,可是银行卡里面只有100块钱,泡老婆总得吃点浪漫的,钱肯定不够,于是打电话给老叶让打500块钱,于是出现下面的步骤:
1.老杨查了下自己的账号,发现只有100块钱,于是打电话让老叶打500进去。
2.老叶在柜台操作打了500(写操作)。
3.老杨查了下,果然是600了(读操作),于是带着老婆去吃西餐。
4.老叶的女朋友正好在银行看到老叶,问老叶在干什么,老叶实话实说,老叶的女朋友很气愤,说取消了,回去跪地板,居然敢藏私房钱。
5.老杨吃完饭,去付钱,被告之卡里面只有100块钱,后来因为老杨人品好,暂时欠账,不然就是刚喝王八汤,又吃霸王餐。
这个情况本质是:写-读冲突,称为读脏,因为前面一个还没提交,也就是还不是自己的钱,还没漂白。
场景3:“读-写”冲突,不可重复读:
老杨,老叶,小马哥去吃饭,都不想请客,于是说查下银行卡,谁的钱多谁请客,查了下老杨的账号,果然里面只有100块钱(读操作)。老叶聪明,于是出现下面一个场景。
1.吃完饭,到了要付账的时候,老叶向叶弟媳使眼色,弟妹打了个ok的手势(写操作)。
2.老叶说,我们再查下账号,谁的钱多,谁请。
3.于是一查,老杨的变成了600,居然是最有钱的,于是老杨请客了。(也许有人说老叶傻,老叶不傻,在没有规则的世界里面,老叶回滚操作已经不是第一次做了)。
这个问题的本质是:读和写冲突,两次读的数据不一样。
于是老杨很生气,每次都被耍,于是下一篇文章里面,老杨变得比现在聪明了一点点,不过还是继续被耍。请看下一篇,锁的初级登场。