当前位置: 首页 > news >正文

ASP.NET MVC Lock锁的测试

思路:我们让后台Thread.Sleep一段时间,来模拟一个耗时操作,而这个时间可以由前台提供。

我们开启两个或以上的页面,第一个耗时5秒(提交5000),第二个耗时1秒(提交1000)。

期望的测试结果:

不加Lock锁,第二个页面会先执行完,因为耗时短(1秒)。

加了Lock锁,第二个页面会一直等待,直到第一个页面执行完成后再进行。

后台:

    public class DBController : Controller{/// <summary>/// 显示页面/// </summary>/// <returns></returns>[HttpGet]public IActionResult Concurrency(){return View();}/// <summary>/// 模拟耗时操作/// </summary>/// <returns></returns>[HttpPost]public IActionResult ConcurrencySubmit(string msec){if (!string.IsNullOrEmpty(msec)){System.Threading.Thread.Sleep(int.Parse(msec));LogHelper.Info("submit:" + msec);}return View("Concurrency");}}

前台页面 Concurrency.cshtml:

@using(Html.BeginForm("ConcurrencySubmit", "DB", FormMethod.Post))
{
@Html.TextBox("msec",1000)
<button>提交</button>
}

然后开两个页面,第一个5秒,第二个1秒,同时提交。

发现第二个页面先执行完毕了,因为耗时最短。

接下来我们使用Lock来进行防并发处理,修改后台代码:

    public class DBController : Controller{private static object locker = new object();/// <summary>/// 显示页面/// </summary>/// <returns></returns>[HttpGet]public IActionResult Concurrency(){return View();}/// <summary>/// 模拟耗时操作/// </summary>/// <returns></returns>[HttpPost]public IActionResult ConcurrencySubmit(string msec){lock (locker){if (!string.IsNullOrEmpty(msec)){System.Threading.Thread.Sleep(int.Parse(msec));LogHelper.Info("submit:" + msec);}}return View("Concurrency");}}

同样的方法,再次提交。这次会发现第二个页面会等待,直到第一个页面执行完成后才执行

http://www.lryc.cn/news/398809.html

相关文章:

  • Hadoop3:HDFS-通过配置黑白名单对集群进行扩缩容,并实现数据均衡(实用)
  • TensorFlow系列:第五讲:移动端部署模型
  • 深度学习DeepLearning二元分类 学习笔记
  • Eureka 介绍与使用
  • Java异常体系、UncaughtExceptionHandler、Spring MVC统一异常处理、Spring Boot统一异常处理
  • bash终端快捷键
  • 【Visual Studio】Visual Studio报错合集及解决办法
  • 【微信小程序知识点】转发功能的实现
  • 用python识别二维码(python实例二十三)
  • 电脑文件夹怎么设置密码?让你的文件更安全!
  • paddla模型转gguf
  • Memcached vs Redis——Java项目缓存选择
  • 大模型最新黑书:基于GPT-3、ChatGPT、GPT-4等Transformer架构的自然语言处理 PDF
  • 【电子数据取证】电子数据司法鉴定
  • 使用 OpenCV 的 inRange 函数进行颜色分割
  • OpenAI终止对中国提供API服务,对国内AI市场产生重大冲击?
  • JavaDS —— 栈 Stack 和 队列 Queue
  • C++进阶:继承和多态
  • 【八大排序】java版(上)(冒泡、快排、堆排、选择排序)
  • .Net Core 微服务之Consul(二)-集群搭建
  • C++ --> 类和对象(二)
  • 利用宝塔安装一套linux开发环境
  • VB 实例:掌握 Visual Basic 编程的精髓
  • 层次分析法:matlab代码实现
  • 07-7.5.3 处理冲突的方法
  • 几何距离与函数距离:解锁数据空间中的奥秘
  • LabVIEW的Actor Framework (AF) 结构介绍
  • gitlab 搭建使用
  • 探索JT808协议在车辆远程视频监控系统中的应用
  • 视频使用操作说明书-T80005系列视频编码器如何对接海康NVR硬盘录像机,包括T80005系列高清HDMI编码器、4K超高清HDMI编码器