并发控制策略:
乐观并发控制与悲观并发控制。
乐观并发:通过冲突监测和事务回滚来防止并发业务事务中的冲突
悲观并发:每次只允许一个业务事务访问数据以防止并发业务事务中的冲突
读写锁:
读写锁是互斥的(得到了读锁就不能再获取写锁)。读写锁可以用来解决不一致读问题,悲观锁策略可以通过读加锁和写加锁来处理这个问题。读数据时需要一个读锁(或者叫共享锁);写数据时需要一个写锁(或者叫排它锁)。对于读锁,可以一次多个人对同一份数据加锁,但是一旦有人得到了读锁,其余人就不无法再得到写锁;而想要获取写锁就必须释放共享锁。乐观锁测试:所有读取的数据都需要跟共享数据进行版本标记比较,更新提交时需要核对更新数据的版本标记以及共享数据(读取的数据)的版本标记,任何不同都意味着冲突的发生。
svn提交时,有时会遇到冲突,随后会让你选择解决冲突的方案:本地还是版本库。其实就是应用了乐观锁。最明显的标志就是,每当你提交了一次svn后,都会返回一个版本号,此版本号就是用来验证冲突是否发生的。
关系数据库中的crud sql原语中充斥着对两种并发的应用,同样也存在于数据库引擎中。
编程语言级别的读写锁(C#),参考官网的 readerwriterlockslim 类
redis下的事务控制是并发控制策略中的 乐观并发,并没有真正的锁