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

Hos*_*146 0 .net c# 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();
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

'CoaterDataLock'被声明为ReaderWriterLockSlim对象

在我的代码中,我在'FcdaCache'上执行以下查询:

CicApplication.FcdaCache.Where(row => row.Coater == coater)
Run Code Online (Sandbox Code Playgroud)

我的问题是这个.当我执行此查询时,是否会尝试获取FcdaCache上的读锁定?我认为它会但不确定.

Fis*_*aen 5

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