C#/ ASP.NET-Web应用程序锁定
时间:2020-03-06 14:38:40 来源:igfitidea点击:
我正在使用C#/ ASP.NET Web应用程序,在很多情况下需要锁定。理想情况下,我希望锁独立运行,因为它们彼此无关。我一直在考虑[MethodImpl(MethodImplOptions.Synchronized)]
和使用lock()
的几种方法,但是我有一些问题/疑虑。
看起来MethodImplOptions.Synchronized实际上将执行
lock(this)`。如果真是这样,似乎进入任何同步方法的线程都将阻止所有其他线程进入任何同步方法。是对的吗?如果是这样,这还不够细致。在这一点上,似乎我也可以使用Application.Lock。 (但是如果我错了,请纠正我。)
关于lock()
,我试图弄清楚应该传递什么。我是否应该仅为此目的创建一组对象,并将每个对象用于不同的锁?有没有更好的办法?
提前致谢!
解决方案
我们可以公开一些静态引用或者单例,然后将其锁定()。
也许我们可以在意中解释为什么需要这种锁定以及将其用于什么目的?
在静态/应用程序级别创建离散对象实例是进行纯互斥锁定的最佳方法。
还应该考虑应用程序级别的读取器/写入器锁定实例是否也可以帮助改善应用程序的并发性,例如用于读取和更新列表,哈希等。
我的偏好是专门为锁创建一个对象。
private object lockForSomeResource = new object();
在管理有争议的资源的类中。
杰夫·里希特(Jeff Richter)发布了我前一段时间读过的一篇推荐该文章的文章。
如果锁中有任何需要另一个锁的代码,则需要仔细考虑将它们设计为层次结构。确保始终以相同的顺序请求它们。
我已经在该论坛上发布了类似的问题,可能会对我们有所帮助。以下是链接
在.NET中写入Web服务中单个文件的问题