2

我刚刚阅读了一篇文章,描述了 HttpApplicationState 如何具有AcquireRead() / AcquireWrite()管理并发访问的功能。它继续解释说,在某些情况下,我们需要在 Application 对象上使用 explictLock()Unlock()避免竞争条件。

如果对象隐式处理并发访问,我无法理解为什么应用程序状态应该存在竞争条件。

有人可以向我解释一下吗?为什么我需要使用Application.Lock()and Application.Unlock()?谢谢你 !

4

2 回答 2

3

AcquireRead 和 AcquireWrite 方法位于内部 HttpApplicationStateLock 类中,因此您不要自己使用它们。它们同步访问,但仅用于单次读取或写入。如果您需要同步访问,请从您的代码中使用 Lock 和 Unlock 方法。

如果您要更改不是单次读取或写入的内容,通常需要同步访问,例如添加两个相互依赖的应用程序项目,或者首先检查一个项目是否存在然后添加它:

Application.Lock()
if (Application["info"] == null) {
   Application.Add("info", FetchInfoFromDatabase());
}
Application.Unlock();
于 2009-10-06T11:10:34.840 回答
1

HttpApplicationState - 全局访问变量对所有

正在使用该应用程序的用户。所以为了避免在更改时出现竞争条件

变量的值。我们需要一些预防措施,这就是我们使用的原因

Application.Lock() 并在完成工作后将相同的变量释放给其他人

使用 Application.Unlock() 排队

Application.Lock()
Application("VisitorCount") = Convert.ToInt32(Application("VisitorCount")) + 1
Application.UnLock()
于 2009-10-06T11:14:03.180 回答