我刚刚读了一篇文章,介绍了 HttpApplicationState 如何使用 AcquireRead()/AcquireWrite()
函数来管理并发访问。它继续解释说,在某些情况下,我们需要在 Application 对象上使用显式的 Lock()
和 Unlock()
以避免竞争条件。
如果对象隐式处理并发访问,我无法理解为什么应用程序状态应该存在竞争条件。
有人可以向我解释一下吗?为什么我需要使用 Application.Lock()
和 Application.Unlock()
?谢谢!
最佳答案
AcquireRead 和 AcquireWrite 方法位于内部 HttpApplicationStateLock 类中,因此您不必自己使用它们。它们同步访问,但仅限于单个读取或写入。如果需要同步访问,可以在代码中使用 Lock 和 Unlock 方法。
如果您要更改的内容不是单次读取或写入,例如添加两个相互依赖的应用程序项目,或者首先检查某个项目是否存在,然后添加它,您通常需要同步访问:
Application.Lock()
if (Application["info"] == null) {
Application.Add("info", FetchInfoFromDatabase());
}
Application.Unlock();
关于asp.net - HttpApplicationState - 如果线程安全,为什么会存在竞争条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1524922/