我在多線程應用程序中有一個通用字典;爲了實現一個鎖,我創建了一個屬性。線程:鎖定通用字典
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
或CODE#2
var result=MyDict.Values;
foreach(var item in result){
//read value into some other variable
}
因此,雖然即時運行過程中出現的代碼1或2,並在同一時間,如果其他線程嘗試在字典上做一些寫操作,比如..clear dict或添加新項目。那麼,這個解決方案將是線程安全的(使用一個屬性)。 如果不是,那麼是否有其他方法可以做到這一點。
當我說寫操作時,如果不是創建鍵和賦值,可以通過屬性chek key exoist引用該字典。 (因此我沒有在財產中使用setter)
嗨亞當謝謝。 lock(MyDict){if(MyDict.TryGetValue()...} 和 lock(MyLock){if(MyDict.TryGetValue()...} – 2009-04-08 17:28:39