2011-11-14 8 views
0

をどのように動作するかわからない:「CoaterDataLock」がReaderWriterLockSlimオブジェクトの他の場所私のコードでReaderWriterLockSlim - 私はCicApplicationという名前のシングルトン型オブジェクトで次のように宣言している、これは

として宣言されて

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(); 
     } 
    } 
} 

、私が行います'FcdaCache'のクエリに続いて:

CicApplication.FcdaCache.Where(row => row.Coater == coater) 

私の質問はこれです。このクエリを実行すると、FcdaCacheで読み取りロックを取得しようとしますか?私はそうするだろうと確信していた。

答えて

5

私はあなたのコードは何もロックしないと思います。あなたは、ロックを入力し_fcdaCacheを返し、ロックを残します。あなたは並行処理の例外が発生したりデータ競合が発生する可能性がありので、その後、ロック解除であるキャッシュ、上.Where(...)を作る後

+0

あなたのコメントをいただき、ありがとうございます。私はあなたが正しいと思うので、これをさらに調べる必要があります。 – Hosea146

関連する問題