我在名为CicApplication的Singleton类型对象上声明了以下内容:
internal static List<Fcda> FcdaCache
{
get
{
// If the current thread already has a write lock, no need to attempt to acquire a read lock (which would fail anyway)
if (CoaterDataLock.IsWriteLockHeld)
return _fcdaCache;
CoaterDataLock.EnterReadLock();
try
{
return _fcdaCache;
}
finally
{
CoaterDataLock.ExitReadLock();
}
}
}
'CoaterDataLock'被声明为ReaderWriterLockSlim对象
在我的代码中,我在'FcdaCache'上执行以下查询:
CicApplication.FcdaCache.Where(row => row.Coater == coater)
我的问题是这个。当我执行此查询时,是否会尝试获取FcdaCache上的读锁定?我认为它会但不确定。
答案 0 :(得分:5)
我认为你的代码没有锁定任何东西。您输入锁定,返回_fcdaCache
并离开锁定。 后,您在该缓存上创建.Where(...)
,然后解锁,因此可能发生并发异常或可能发生数据争用。