webform如何正确使用lock?

yzy8788 2017-09-23 03:07:48
我有一个类似api的aspx页面,这个页面有数据库操作
下面有无数个客户端往这个aspx页面post,请求数据
这时数据库偶尔会抛“死锁牺牲品”异常,所以我想给这个aspx页面加一个lock
[code=c#]
public static readonly object _lockObject = new object();
lock(_lockObject)
{
......
}
[/code]
这样加完后,好像没有什么效果,还会抛“死锁牺牲品”异常,咋回事尼?
...全文
354 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 3 楼 yzy8788 的回复:
1、如何来实现排队尼?依我目前水平,能想到的就是lock,但是webform里面lock没玩过 2、死锁的原因估计就是都来执行sql语句,就死锁了
比如说你在一个
while(datareader.Read())
{
    var x = (int)datareader["x"];
    另外一个查询(x);
}
这样嵌套查询,也一样会死锁。不是只有多用户访问才死锁。 自己好好想想如何更好地编写和测试 sql 语句吧。
  • 打赏
  • 举报
回复
lock 就会让同一个进程中的多线程、在lock 管理区域的代码去排队执行。(你的这个问题不用考虑asp.net 频繁重启的问题) 可以先把 lock 语句放在一边。
  • 打赏
  • 举报
回复
lock 可能是完全起作用的,但是跟“死锁”无关。你的死锁故障可能是你的 ....... 代码中的业务处理过程造成的,例如你在一个业务处理工程中用了多个连接、甚至多个事务,有异步处理,等等,这些都需要考虑。
yzy8788 2017-09-24
  • 打赏
  • 举报
回复
嗯,谢谢楼上,最后我测试了一下,lock确实是起作用的,是我的sql语句写的有问题
yzy8788 2017-09-23
  • 打赏
  • 举报
回复
引用 2 楼 closurer 的回复:
这样这个页面就不能并发了,要排队执行。而且不一定能解决死锁问题。建议你还是从死锁的原因入手。
1、如何来实现排队尼?依我目前水平,能想到的就是lock,但是webform里面lock没玩过 2、死锁的原因估计就是都来执行sql语句,就死锁了
闭包客 2017-09-23
  • 打赏
  • 举报
回复
这样这个页面就不能并发了,要排队执行。而且不一定能解决死锁问题。建议你还是从死锁的原因入手。
yzy8788 2017-09-23
  • 打赏
  • 举报
回复
public static readonly object _lockObject = new object();
lock(_lockObject)
{
  ......
}

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧