悲观并发 乐观并发 Entity Framework Core中的并发处理

 

悲观并发策略

A用户发起一个请求   开启了事务 查询到了某一条数据 进行修改     在A提交事务之前 其他人都不能对这条数据进行修改

这种策略最常见的一个问题就是死锁  比如A修改X记录,B修改Y记录,他们分别锁死了这两条记录,但是X和Y记录是相关的,A修改X的时候发现需要修改Y,但是Y又被锁定了,B修改Y的时候需要修改X,但是X也已经被锁定了,这样就产生了死锁问题

 

产生死锁的条件   

1.一定基于多线程 

2.锁内部用到了其他加锁的资源  

 

 

乐观并发策略

A用户发起一个请求   开启了事务 查询到了某一条数据 进行修改     在A提交事务之前 其他人也可以对这条数据进行修改      但是A提交事务的时候 会判断这条记录是否给修改 如果给修改过 就报错   

可以通过给实体加版本号实现    在提交事务的时候  会对比当前修改后的实体版本号跟数据库中实体的版本号  只有提交版本号大于数据库的记录版本号才会修改成功   否则就抛出异常

 

 

 

http://www.cnblogs.com/GuZhenYin/p/7761352.html

 

https://blog.csdn.net/qq_34337272/article/details/81072874

posted @ 2019-03-01 09:17  几清  阅读(412)  评论(0编辑  收藏  举报