1. ホーム
  2. c#

[解決済み] コンカレントディクショナリー 正しい使い方

2023-03-28 19:47:47

質問

コンカレント辞書の正しい使い方はこれでしょうか?

private ConcurrentDictionary<int,long> myDic = new ConcurrentDictionary<int,long>();

//Main thread at program startup

for(int i = 0; i < 4; i++)
{
  myDic.Add(i, 0);
}

//Separate threads use this to update a value

myDic[InputID] = newLongValue;

私はロックなどをしておらず、複数のスレッドが同じことをしようとしていても、ただ辞書の値を更新しているだけです。

どのように解決するのですか?

スレッドセーフの意味によって異なります。

MSDNより - How to: ConcurrentDictionary へのアイテムの追加と削除 :

ConcurrentDictionary<TKey, TValue> はマルチスレッドシナリオのために設計されています。コレクションに項目を追加したり削除したりするために、コード内でロックを使用する必要はありません。しかし、あるスレッドが値を取得し、別のスレッドが同じキーに新しい値を与えてすぐにコレクションを更新することは、常に可能です。

そのため、一貫性のない ビュー を得ることができます。