2

我正在开发一个 C#/ASP.NET Web 应用程序,并且在许多情况下我需要进行锁定。理想情况下,我希望锁独立运行,因为它们彼此无关。我一直在考虑[MethodImpl(MethodImplOptions.Synchronized)]和一些使用方法lock(),但我有一些问题/疑虑。

看起来像 MethodImplOptions.Synchronized will essentially dolock(this)`。如果是这种情况,似乎一个线程进入任何同步方法都会阻止所有其他线程进入任何同步方法。那正确吗?如果是这样,这还不够细化。在这一点上,我似乎还不如使用 Application.Lock。(但如果我错了,请纠正我。)

关于lock(),我试图弄清楚我应该传入什么。我是否应该专门为此目的创建一组对象,并将每个对象用于不同的锁?有没有更好的办法?

提前致谢!

4

4 回答 4

3

我的偏好是专门为锁创建一个对象。

private object lockForSomeResource = new object();

在管理有争议的资源的类中。Jeff Richter 发表了一篇我前段时间读过的文章,推荐了这一点。

如果锁中有任何代码需要另一个锁,您需要仔细考虑将它们设计为层次结构。确保您始终以相同的顺序请求它们。

于 2008-09-24T05:58:21.067 回答
1

我在这个论坛上发布了一个类似的问题,这可能会对你有所帮助。以下是链接

在 .NET 的 Web 服务中写入单个文件的问题

于 2008-09-24T07:10:49.333 回答
0

您可以公开一些静态引用或单例,然后 lock() 。

也许您可以解释一下为什么需要这种锁定以及将其用于什么用途?

于 2008-09-24T05:53:27.537 回答
0

在静态/应用程序级别创建离散对象实例是纯排他锁定的最佳方式。

还应该考虑应用程序级别的读/写锁实例是否也有助于提高应用程序的并发性,例如读取和更新列表、哈希等。

于 2008-09-24T05:56:18.077 回答