我正在开发 C#/ASP.NET Web 应用程序,并且在很多情况下都需要进行锁定。理想情况下,我希望锁独立运行,因为它们彼此无关。我一直在考虑 [MethodImpl(MethodImplOptions.Synchronized)]
和使用 lock()
的几种方法,但我有一些问题/疑虑。
看起来 MethodImplOptions.Synchronized本质上会执行
lock(this)`。如果是这样的话,似乎进入任何同步方法的线程都会阻止所有其他线程进入任何同步方法。是对的吗?如果是这样,那么这还不够细化。到那时,我似乎也可以使用Application.Lock。 (但如果我错了,请纠正我。)
关于lock()
,我试图找出应该传入的内容。我是否应该仅为此目的创建一组对象,并将每个对象用于不同的锁?有更好的办法吗?
提前致谢!
最佳答案
我的偏好是专门为锁创建一个对象。
private object lockForSomeResource = new object();
在管理有争议资源的类中。 Jeff Richter 发布了 article我前段时间读到推荐这个。
如果一个锁中有任何代码需要另一个锁,那么您需要仔细考虑将它们设计为层次结构。确保您始终以相同的顺序请求它们。
关于C#/ASP.NET - Web 应用程序锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/125606/