我正在开发一个C#/ ASP.NET Web应用程序,我有很多需要锁定的情况。理想情况下,我希望锁独立行动,因为它们彼此无关。我一直在考虑[MethodImpl(MethodImplOptions.Synchronized)]
和一些使用lock()
的方法,但我有一些问题/疑虑。
似乎是MethodImplOptions.Synchronized will essentially do
lock(this)`。如果是这种情况,似乎进入任何同步方法的线程将阻止所有其他线程进入任何同步方法。是对的吗?如果是这样,这不够精细。那时,我似乎也可以使用Application.Lock。 (但如果我错了,请纠正我。)
关于lock()
,我正在试图找出我应该传递的内容。我是否应该仅为此目的创建一组对象,并将每个对象用于不同的锁定?还有更好的方法吗?
提前致谢!
答案 0 :(得分:3)
我的偏好是专门为锁创建一个对象。
private object lockForSomeResource = new object();
在管理争议资源的类中。 杰夫里希特发布了article我前段时间读过的那篇推荐这篇文章。
如果锁中需要另一个锁,那么您需要仔细考虑将这些设计为层次结构。确保您始终以相同的顺序请求它们。
答案 1 :(得分:1)
我在这个论坛上发布了一个类似的问题,可能会对你有帮助。以下是链接
答案 2 :(得分:0)
您可以公开一些静态引用或单例,并锁定()。
也许你可以解释为什么你需要这样的锁定以及你将用它做什么?
答案 3 :(得分:0)
在静态/应用程序级别创建离散对象实例是普通独占锁定的最佳方式。
还应该考虑应用程序级别的读取器/写入器锁定实例是否也有助于提高应用程序的并发性,例如:用于阅读和更新列表,哈希等。