Topic: 一个关于乐观锁的疑问

  Print this page

1.一个关于乐观锁的疑问 Copy to clipboard
Posted by: jianhua23
Posted on: 2004-10-29 09:35

昨天下班回家,在车上想到了这个问题,觉得蛮困惑的。先来看一下《Hibernate 开发指南》中的一些描述。
悲观锁:
如一个金融系统,当某个操作员读取用户的数据,并在读出的用户数据的基础上进行修改时(如更改用户帐户余额),如果采用悲观锁机制,也就意味着整个操作过程中(从操作员读出数据、开始修改直至提交修改结果的全过程,甚至还包括操作员中途去煮咖啡的时间)
乐观锁:
即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个“version”字段来实现。读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。

问题是:
在使用乐观锁的情况下,有两个Transaction,一个先开始而晚结束,一个晚开始先结束,就会出现晚开始的那个提交数据成功,而先开始的那个出现了 Exception,是不是对逻辑不符?!

2.Re:一个关于乐观锁的疑问 [Re: jianhua23] Copy to clipboard
Posted by: liankun
Posted on: 2004-11-04 13:46

NO PROBLEM

3.Re:一个关于乐观锁的疑问 [Re: jianhua23] Copy to clipboard
Posted by: lot1
Posted on: 2004-11-05 00:18

think about read/write lock. The second trans can read only cannot update if the first is updating - or DB/app could hold the second one and allow the first one complete first.

4.Re:一个关于乐观锁的疑问 [Re: jianhua23] Copy to clipboard
Posted by: WeiterWay
Posted on: 2004-11-24 09:54

i think r/w lock is also a type of pessimistic lock. e.g in oracle, SELECT * FROM TABLEA WHERE .... FOR UPDATE

5.Re:一个关于乐观锁的疑问 [Re: WeiterWay] Copy to clipboard
Posted by: jianhua23
Posted on: 2004-11-24 10:35

谢谢 Smile


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923