私はマルチスレッドのアプリケーションで汎用辞書を持っています。ロックを実装する私はプロパティを作成しました。今は書く場合スレッディング:汎用辞書のロック
static object myLock=new object();
Dictionary<key,SomeRef> dict=new Dictionary<key,SomeRef>();
public Dictionary<key,SomeRef> MyDict{
get{
lock(myLock){
return dict;
}
}
}
コード#1
MyDict.TryGetValue
又はコード#2
var result=MyDict.Values;
foreach(var item in result){
//read value into some other variable
}
ので、一方IM runnigコード1又は2と同時に、いくつかの他のスレッドしようとした場合..clear dictのような辞書の書き込み操作を行うか、新しい項目を追加する。このソリューションは、スレッドセーフである(プロパティを使用します)。もしそうでなければ これを行う他の方法はありますか?
私は書き込み操作を言うとき、それはキーを作成して値を割り当てないと、プロパティチェックキーエキステイストを介してdictの参照を取ることができます。 (したがって私は不動産のセッターを使用しません)
こんにちはアダムありがとう。 の違いは何ですか?(MyDict){if(MyDict.TryGetValue()...} と ロック(MyLock){if(MyDict.TryGetValue()...} –
唯一の違いはロックオブジェクトです辞書(または他のリソース固有のオブジェクト)をロックするのは慣例にすぎません。同じ同期オブジェクトを使用している限り、あなたは大丈夫です。 –