当前位置:  开发笔记 > 后端 > 正文

如何在asp.net应用程序中实现"悲观锁定"?

如何解决《如何在asp.net应用程序中实现"悲观锁定"?》经验,为你挑选了1个好方法。

我希望任何有经验的人在asp.net应用程序中实现类似"悲观锁定"的建议.这是我正在寻找的行为:

    用户A打开订单#313

    用户B尝试打开#313订单,但被告知用户A已经将订单专门打开了X分钟.

由于我之前没有实现过这个功能,所以我有一些设计问题:

我应该将哪些数据附加到订单记录中?我在考虑:

LockOwnedBy

LockAcquiredTime

LockRefreshedTime

如果LockRefreshedTime <(现在 - 10分钟),我会考虑解锁记录.

我如何保证锁定的保存时间不超过必要但不会意外到期?

我对jQuery很满意,所以欢迎使用客户端脚本的方法.这将是一个内部Web应用程序,所以我可以相当自由地使用带宽/周期.我也想知道"悲观锁定"是否适合这个概念.



1> andynormancx..:

听起来你大部分都在那里.我不认为你真的需要LockRefreshedTime,它并没有真正添加任何东西.你也可以使用LockAcquiredTime来决定锁何时变得陈旧.

您要做的另一件事是确保您使用交易.您需要在数据库事务中包装锁的检查和设置,这样您就不会得到两个认为具有有效锁的用户.

如果您的任务需要在多个资源上获取锁定(即,给定类型的多个记录或多于一种类型的记录),则无论何时进行锁定,都需要以相同的顺序应用锁定.否则你可以有一个死锁,其中一位代码有记录A锁定并且想要锁定记录B而另一位代码已经B锁定并且正在等待记录A.

至于如何确保锁不会意外释放.如果您有任何长时间运行的进程可以运行超过锁定超时,请确保它在运行期间刷新其锁定.

术语"显式锁定"也用于描述锁定时间.

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有