c#中lock的使用(用于预约超出限额的流程)

简介:

一个项目,预约系统,核心二张表:预约表,预约限额表

用户点击预约按钮后,

1. 先select 预约限额表把该预约时间段的限额取出来, 

2. 再select 预约表把该预约时间已经预约上的次数算出来

3. 第一步减第二步,得到是否还能进行预约,大于0就可以预约了

4. 第三步里大于0的话就insert 预约表

之前的代码都是用ado.net+sql语句执行的,然后在正式运行的时候,每天18点可以进行预约,然后我设置了某一时间段是可以预约1个,

结果在18点的时候N个人点了预约,导致计算出预约数后想插入之前,另一个人又来计算预约数了,导致超出限额了

问了下网友,给了三种解决方案:

1. redis

2. c#里的lock

3. c#里的ConcurrentQueue


自己 测试了一下,用第二种 ,成功了,

success1.png

success2.png

success3.png


第三种的话网友也给了个示例:

%E9%A2%84%E7%BA%A6%E5%B9%B6%E5%8F%91%E5%

%E9%A2%84%E7%BA%A6%E5%B9%B6%E5%8F%91%E5%

%E9%A2%84%E7%BA%A6%E5%B9%B6%E5%8F%91%E5%

目录
相关文章
|
1月前
|
安全 编译器 C#
C#学习相关系列之多线程---lock线程锁的用法
C#学习相关系列之多线程---lock线程锁的用法
C#多线程系列(2):多 线程锁lock和Monitor
C#多线程系列(2):多 线程锁lock和Monitor
353 0
锁、C#中Monitor和Lock以及区别
1.Monitor.Enter(object)方法是获取锁,Monitor.Exit(object)方法是释放锁,这就是Monitor最常用的两个方法,当然在使用过程中为了避免获取锁之后因为异常,致锁无法释放,所以需要在try{} catch(){}之后的finally{}结构体中释放锁(Monitor.Exit())。
2501 0
|
C#
一起谈.NET技术,C#中的lock关键字
  前几天与同事激烈讨论了一下,有一点收获,记录起来。   首先给出MSDN的定义:   lock 关键字可以用来确保代码块完成运行,而不会被其他线程中断。这是通过在代码块运行期间为给定对象获取互斥锁来实现的。
885 0