나는 멀티 스레드 응용 프로그램에서 일반 사전을 가지고 있습니다. 자물쇠를 구현하는 속성을 만들었습니다. 지금 내가 쓰는 경우스레딩 : 일반 사전에 잠금
static object myLock=new object();
Dictionary<key,SomeRef> dict=new Dictionary<key,SomeRef>();
public Dictionary<key,SomeRef> MyDict{
get{
lock(myLock){
return dict;
}
}
}
CODE # 1
MyDict.TryGetValue
또는 CODE # 2
var result=MyDict.Values;
foreach(var item in result){
//read value into some other variable
}
그래서 잠시 메신저 runnig 코드 1 또는 2와 같은 시간에 다른 스레드 시도하는 경우 ..clear dict와 같은 사전에 쓰기 작업을하거나 새 항목을 추가하십시오. 그런 다음이 솔루션은 스레드로부터 안전합니다 (속성 사용). 그렇지 않다면 을 수행하십시오. 다른 방법이 있습니다.
필자가 쓰기 작업을 할 때 속성 작성자 키 엑소스트리스트를 통해 사전을 참조하거나 키를 작성하지 않고 값을 할당 할 수 있습니다. (따라서 재산에서 세터를 사용하지 않습니다.)
아담 감사합니다. 차이점은 무엇입니까 lock (MyDict) {if (MyDict.TryGetValue() ...} 및 lock (MyLock) {if (MyDict.TryGetValue() ...} –
유일한 차이점은 잠금 개체입니다. 사전 (또는 다른 리소스 관련 개체)을 잠그는 것은 관례입니다. 동일한 동기화 개체를 사용하는 한 괜찮습니다. –