Chinaunix首页 | 论坛 | 博客
  • 博客访问: 237671
  • 博文数量: 23
  • 博客积分: 2262
  • 博客等级: 大尉
  • 技术积分: 872
  • 用 户 组: 普通用户
  • 注册时间: 2004-12-26 15:59
文章分类

全部博文(23)

文章存档

2009年(3)

2008年(20)

分类: Mysql/postgreSQL

2008-12-09 16:56:51

我们都知道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,居然是最有钱的,于是老杨请客了。(也许有人说老叶傻,老叶不傻,在没有规则的世界里面,老叶回滚操作已经不是第一次做了)。

  这个问题的本质是:读和写冲突,两次读的数据不一样。

  于是老杨很生气,每次都被耍,于是下一篇文章里面,老杨变得比现在聪明了一点点,不过还是继续被耍。请看下一篇,锁的初级登场。

阅读(1025) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~