gpt4 book ai didi

asp.net - HttpApplicationState.Lock 究竟做了什么?

转载 作者:行者123 更新时间:2023-12-02 03:54:58 27 4
gpt4 key购买 nike

我的应用程序在应用程序状态中存储两个相关的数据位。每次我读取这两个值时,我可能(取决于它们的值)都需要更新它们。

因此,为了防止在另一个线程正在读取它们时更新它们,我锁定了应用程序状态。

但是 HttpApplicationState.Lock Method 的文档真的没有告诉我它到底做了什么。

例如:

  1. 它是如何锁定的?它会阻止任何其他线程写入数据吗?

  2. 它是否也阻止读取访问?如果不是,那么这个练习就毫无意义,因为这两个值可以在另一个线程读取第一个值之后但在读取第二个值之前更新。

除了防止多个线程同时写入数据外,还有助于防止一个线程在另一个线程写入时进行读取;否则,第一个线程可能认为它需要在不需要时刷新数据。我想限制执行刷新的次数。

最佳答案

看代码是只锁写,不锁读。

public void Lock()
{
this._lock.AcquireWrite();
}
public void UnLock()
{
this._lock.ReleaseWrite();
}
public object this[string name]
{
get
{
return this.Get(name);
}
set
{
// here is the effect on the lock
this.Set(name, value);
}
}
public void Set(string name, object value)
{
this._lock.AcquireWrite();
try
{
base.BaseSet(name, value);
}
finally
{
this._lock.ReleaseWrite();
}
}

public object Get(string name)
{
object obj2 = null;
this._lock.AcquireRead();
try
{
obj2 = base.BaseGet(name);
}
finally
{
this._lock.ReleaseRead();
}
return obj2;
}

写和读都是线程安全的,也就是说都准备好了锁机制。因此,如果您正在进行读取数据的循环,则可以将其锁定在外部以防止其他人破坏列表。

阅读这个答案也很不错:Using static variables instead of Application state in ASP.NET

最好避免使用 Application 来存储数据,而直接使用带有锁定机制的静态成员,因为首先 MS 建议这样做,其次因为对应用程序静态数据的读/写是在每个调用锁定访问数据。

关于asp.net - HttpApplicationState.Lock 究竟做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13095542/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com