2009-04-06 10 views
1

ハーフベークを超えるDBMSでは、読み取りロックと更新ロックの区別があります。私のマルチスレッドのC#コードでは、これまでにlockというキーワードが使われていましたが、今日私のアプリケーションでは、これを読み書きとロックで区別できるようにすれば、アプリケーションのパフォーマンスは大幅に向上します。私は同時に安全に読むことができるスレッドをたくさん持っていますが、まれにしか書くことはできません。.netでの読み取りロック

書き込みロックの要求が両方とも読み込みロックの取得を停止し、現行の読み取りロックが解放されるまで停止する独自のロック方式を実装する必要があります。

これは非常に難しくありません。そのすべては、あなたが名前をつけたいデータベース理論のテキストの中で、Dateやその他の人によって徹底的に詳細に記述されています。

確かに私はこの必要性に直面していませんか?そこには何がありますか、特にC#については?


ありがとう、ドミトリ。

私が望んでいたもう一つのことは、あなたが試した可能性のある図書館の長所と短所に人々が持つ可能性のある体験やコメントでした。

良い天気は、System.Coreにあります!それをやめ、ドミトリ、あなたは私を老いに感じさせている。

lock (object) { ... }の構文と似た構文的な砂糖をMicrosoftに提供する最も現実的な方法は何でしょうか。密接にモニターを明示的に使用を平行MSDNのサンプル

public class SynchronizedCache 
{ 
    private ReaderWriterLockSlim cacheLock = new ReaderWriterLockSlim(); 
    private Dictionary<int, string> innerCache = new Dictionary<int, string>(); 

    public string Read(int key) 
    { 
    cacheLock.EnterReadLock(); 
    try 
    { 
     return innerCache[key]; 
    } 
    finally 
    { 
     cacheLock.ExitReadLock(); 
    } 
    } 

    public void Add(int key, string value) 
    { 
    cacheLock.EnterWriteLock(); 
    try 
    { 
     innerCache.Add(key, value); 
    } 
    finally 
    { 
     cacheLock.ExitWriteLock(); 
    } 
    } 
... 

から適応

。 MSの助けを借りれば、これほどきれいで簡単なことができます。

private Dictionary<int, string> innerCache = new Dictionary<int, string>(); 

public string Read(int key) 
{ 
    readlock(innerCache) return innerCache[key]; 
} 
public void Add(int key, string value) 
{ 
    writelock (innerCache) innerCache.Add(key, value); 
} 

答えて

5

ReaderWriterLockSlimクラス(またはその古いバージョン、ReaderWriterLock)を見てみましょう。このロッククラスは、読み取りロックと書き込みロックを区別し、複数のリーダーを持つことができますが、ライターは1つだけです。

関連する問題