看着代码只锁定写入,而不是读取。
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
其更好地避免使用存储数据的应用程序,而直接使用你的锁止机构的静态成员,因为首先MS的建议它,其次是因为对应用程序静态数据的读/写是在每次访问数据时调用锁定。
如果是这样,除了将两个项目存储在同一个对象中之外,似乎没有任何方法可以让我的两个数据在读取时保持同步。 –
@JonathanWood我说你可以锁定你什么时候读数据,以避免别人写他们并改变他们。其余所有的都是同步的,并且它们是线程安全的 – Aristos
你能告诉我锁是如何工作的吗? '_lock.AcquireWrite()'是否阻止任何其他尝试写入的线程? –