python做的网站多吗,iis7.0 asp网站配置,自己电脑上做网站怎么使用源码,收费下载资源 wordpress插件思路#xff1a;我们让后台Thread.Sleep一段时间#xff0c;来模拟一个耗时操作#xff0c;而这个时间可以由前台提供。
我们开启两个或以上的页面#xff0c;第一个耗时5秒(提交5000)#xff0c;第二个耗时1秒(提交1000)。
期望的测试结果#xff1a;
不加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);}}
同样的方法再次提交。这次会发现第二个页面会等待直到第一个页面执行完成后才执行