ReaderWriterLockSlim - 不确定这是如何工作的

时间:2011-11-14 12:29:45

标签: c# .net locking

我在名为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上的读锁定?我认为它会但不确定。

1 个答案:

答案 0 :(得分:5)

我认为你的代码没有锁定任何东西。您输入锁定,返回_fcdaCache并离开锁定。 后,您在该缓存上创建.Where(...),然后解锁,因此可能发生并发异常或可能发生数据争用。