zoukankan      html  css  js  c++  java
  • .NET:在线悲观锁、在线乐观锁、离线悲观锁、离线乐观锁代码示例

    .NET:在线悲观锁、在线乐观锁、离线悲观锁、离线乐观锁代码示例

    名称解释

    悲观锁

    定义:我修改数据的时候,不允许别人修改数据。

    意图:并发很容易发生(悲观者经常认为某件坏事会发生在自己身上)。

    场景:绩效评分的过程,因为每个评估人评分后都要修改评估结果表的同一行记录,而且经常是在同一个时间段进行的评分,评分的过程就适合用悲观锁。

    乐观锁

    定义:谁都可以修改数据,提交的时候和数据库做比较,如果数据在这期间发生了变化,有两种处理思路:1、失败;2、合并后提交。

    意图:并发不容易发生(乐观者经常认为某件坏事不会发生在自己身上)。

    场景:多个人事管理员都可以修改劳动合同,因为这种并发场景很少发生,因此此处采用乐观锁会好很多。

    离线

    定义:也叫长事务;一次业务过程需要多次的和服务器通信。

    意图:业务要求。

    场景:修改审批流程的过程会持续多个请求,多个请求必须作为一个长事务对待。

    在线

    定义:也叫短事务;一次业务过程只和服务器通信一次。

    意图:业务要求

    场景:多数业务属于这种场景。

    在线悲观锁

    代码示例

    请查看我的这篇博客.NET:脏读、不可重复读和幻读代码示例,基本上将隔离基本设置为“可重复读”就可以满足隔离要求。

    在线乐观锁

    代码示例

    复制代码
     1         [TestMethod]
     2         [ExpectedException(typeof(DbUpdateConcurrencyException))]
     3         public void 乐观锁测试()
     4         {
     5             using (var context1 = new TestEntities())
     6             {
     7                 context1.Users.First().Name = "李妞妞1";
     8 
     9                 using (var context2 = new TestEntities())
    10                 {
    11                     context2.Users.First().Name = "李妞妞2";
    12                     context2.SaveChanges();
    13                 }
    14 
    15                 context1.SaveChanges();
    16             }
    17         }
    复制代码

    此处利用了EntityFramework自带的乐观并发机制(版本字段),多数ORM框架都提供这种支持,自己实现也不难,在此就不说了。

    离线悲观锁

    难点是解决离线悲观锁的获取和释放时机,常见的思路是打开Form时判断是否被锁,如果没有被锁,就获取锁,关闭Form时释放锁,会话过期时释放所有锁。锁的管理接口如下:

    复制代码
     1     public interface I离线悲观锁管理接口
     2     {
     3         bool 是否被锁(Guid 单据标识);
     4 
     5         void 获取锁(Guid 用户标识, Guid 单据标识);
     6 
     7         void 释放锁(Guid 用户标识, Guid 单据标识);
     8 
     9         void 释放锁(Guid 用户标识);
    10     }
    复制代码

    离线乐观锁

    服务器端代码和“在线乐观锁”一样,唯一要处理的是在长事务过程中如何在多个请求中存储和传输“版本字段”,常见的方式有url参数和页面html等,在此就不说了。

     
    分类: .NET
  • 相关阅读:
    PHP识别二维码功能,php-zbarcode 安装
    《架构即未来》读后感(三)
    MVC设计模式案例分析
    SOA
    《架构即未来》读后感(二)
    基于网络拓扑及告警的故障根因定位系统实现及算法研究赛题需求分析
    《架构即未来》读后感(一)
    《大型网站技术架构》读后感(二)
    《一线架构师实践指南》读后感(三)
    《大型网站技术架构》读后感(三)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3024128.html
Copyright © 2011-2022 走看看