0

次のマルチスレッド タスクを実行するパターンを提案してください。

テーブルの行をキャッシュするつもりで、次の 2 つの方法でそれらを見つける必要があります。

  • Id (int)別
  • キー別 (文字列)

単一の行ストレージを使用し、2 つの辞書を使用して行を効率的に検索したいと考えています。

キャッシュでは、db から各行を読み取ってグローバル ストレージに格納し、キーと ID で両方の辞書に追加する必要があります。このすべてがマルチスレッド環境で機能する必要があります。

誰でもこれを行うためのエレガントな方法を提案できますか?

アップデート。私のせいです。より「一般的な」使用法では、行が別のソース (db ではない) から読み取られると、ロックがデッドロックにつながる可能性があるため、ロックを回避しようとする際の明らかな (自分にとって) 制限を見逃しました...

4

2 に答える 2

0
private object dictLock = new object();
private Dictionary<int, int> dict1 = new Dictionary<int, int>();
private Dictionary<string, int> dict2 = new Dictionary<string, int>();

public void Add(int rownr, int id, string key)
{
    lock(dictLock)
    {
        dict1.Add(id, rownr);
        dict2.Add(key, rownr);
    }
}

public int GetRow(int id)
{
    lock(dictLock)
    {
        return dict1[id];
    }
}

public int GetRow(string key)
{
    lock(dictLock)
    {
        return dict2[key];
    }
}
于 2013-10-09T12:11:10.397 に答える