-
悲观锁
- 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁。
- 传统的关系型数据库中用到了很多这种锁机制,比如行级锁、表级锁、读锁、写锁等,都是在做操作之前先上锁。
- 使用场景:多写的场景
- 实现方式:加锁
-
乐观锁
- 总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据。如果别人更新了数据则放弃操作。
- 乐观锁并未真正加锁
- 使用场景:多读的场景
- 实现方式:
- CSA(Compare and Swap)机制
- 版本号机制
- CSA(Compare and Swap)机制