乐观锁、悲观锁、共享锁和排它锁的简单理解

来源:互联网 发布:部落冲突三王升级数据 编辑:程序博客网 时间:2024/05/16 14:17

个人简单理解

乐观锁(乐观并发控制)和悲观锁(悲观并发控制)是指数据库在对待并发上控制的两种思想,共享锁和悲观锁是具体的锁的实现,且都属于悲观锁。乐观锁没有加锁


1.共享锁(S)(读锁):一旦事务给数据或记录加上了共享锁(S),则只能读数据不能写数据,其他事务也只能加共享锁(S)知道上一个事务释放了锁

2.排它锁(X)(写锁):一旦被上上排它锁(X),该事务可进行读写操作,其他事务只能等到该事务释放了锁后才能获取锁


这两种锁都是在进行数据操作是先获取锁,因此都是悲观锁的范畴


乐观锁:获取数据的时候不用获取锁,直到需要更新数据的时候才去检查获取的记录是否已被其他事务更新,如果更新了则返回错误抛异常。注意的是,乐观锁中没有锁机制,通常的实现方式是用版本号或时间戳实现,比如,事务get了一条记录,同时获取到了该条记录的version,如果需要做更新操作,则对version进行+1操作,插入数据库时就会检查数据库当前的version+1是否与插入的version一致,如果一致则插入,否则抛异常,另只有更新操作才对version做+1操作,get不会做


悲观锁:获取数据之前先获取锁,再进行操作


具体的专业术语或名词解释可自行搜索,这里只是我个人比较通俗的解释。


参考文章:http://www.cnblogs.com/hadoop-dev/p/7065702.html