2010-11-26 9 views
23

私は静的読み取り専用辞書を持っています。 いいえこの辞書に変更が加えられます。読み取り専用ディクショナリ - .ContainsKeyメソッドを呼び出す複数のスレッド

私は、この辞書から.ContainsKey(Key)を使って複数のスレッドを読み込んでいます。例えば

class MyData 
{ 
    private static private IDictionary<int, string> _dictionary = new Dictionary<int, string>(); 

    MyData() 
    { 
     // Load Dictionary here 
    } 

    public string GetValue(int key) 
    { 
     if (_dictionary.ContainsKey(key)) 
     { 
      return _dictionary[key]; 
     } 
    } 
} 

これにはスレッドの問題がありますか?

答えて

19

誰も突然変異していない場合:これは問題ありません。 時にの編集があった場合は、ReaderWriterLockSlimを参照するか、(私の設定)スナップショット/コピーを編集して参照を入れ替えてください。

+0

を使用することができなければならない。しかし、あなたはまだ必要があるだろう参照を交換している間、Re​​aderWriterLockSlimを右クリックします。 –

+1

@マーク:参照の作成はアトミックであることが保証されていますが、おそらく他のスレッドが変更を参照できるようにフィールド 'volatile'をマークしたいと思います。 – LukeH

+0

私はContainsKeyメソッドを実行している間に参照を交換すると問題が発生する可能性があると私は考えていたと思いますか? –

3

読んでも安全です。

1

複数のスレッドから読み取る前に「追加」がすべて完了していれば問題ありません。その読み取り専用がスレッドセーフではないという理由だけです。それはisntです。

たぶん、あなたは、同時にデータを書き込むことが(そしてあなたは.NET 4.0を使用していた)した場合は、アクセス

関連する問題