문제

나는 ConcurrentDictionary 의 잠금이없는 작동을 좋아합니다.두 개체 :

 ConcurrentDictionary<datetime,myObj> myIndexByDate
 ConcurrentDictionary<myObjSummary, ConcurrentDictionary<int, myObj> myObjectSummary Index
.

이 두 객체는 동기화 상태를 유지해야합니다.이를 수행하는 유일한 방법은 잠금을 사용하여 동시 사전의 모든 이점을 피하는 것입니다.

도움이 되었습니까?

해결책

i Dictionaries가있는 사용자 정의 클래스를 만들고 사전 (추가, 삭제)을 변경하는 데 민감한 메소드에서만 잠금을 사용합니다.

이 방법은 정상적인 사전을 사용하여 수행 해야하는 것보다 훨씬 적은 코드가 필요할 때 동시 사전의 이점을 잃지 않습니다.

다른 팁

ConcurrentDictionary는 특정 인스턴스의 작업에 대해서만 "스레드 안전"입니다.예를 들어,ConcurrentDictionary.tryadd () 호출이 호출되고있는 동안 다른 스레드가 컬렉션을 수정할 수 없습니다 ...

하나의 사전에서 값을 얻은 상태에서 두 번째에 추가하는 동안 원래 사전에 값이 여전히 존재하는 다른 사전에 추가하는 것이 아니라는 것을 의미하지는 않습니다.

하나의 사전에서 다른 사전에서 하나의 값을 이동하는 동안 원래 사전의 값을 제거하는 동안 원래 사전의 값을 제거 할 수있는 것은 불변을 가지고 있습니다 (또는 적어도 가치).conncurrentdictionary를 보장하기가 조금 더 어렵습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top