0

나는 ConcurrentDictionary의 잠금없는 작동을 좋아하고 두 개체에서 사용 :2 개의 ConcurrentDictionaries를 어떻게 동기화해야합니까?

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

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

답변

3

을 나는이 사전에 사용자 정의 클래스를 생성 만 사전을 변경 취약 방법에 대한 잠금을 사용합니다 (삭제, 추가).

을 당신은 혜택을 상실하지 않는다 이 방법은 일반 사전을 사용하여 수행해야하는 것보다 훨씬 적은 코드가 필요하므로 동시 사전의 수를 늘릴 수 있습니다.

1

ConcurrentDictionary는 특정 인스턴스의 작업에 대해서만 "스레드로부터 안전"합니다. 예 : ConcurrentDictionary.TryAdd() 호출이 호출되는 동안 다른 스레드가 콜렉션을 수정할 수 없습니다. ...

이것은 하나의 사전에서 값을 가져 와서 다른 사전에 값을 추가하는 동안 두 번째 단어에 추가하는 동안 원래 사전에 계속 존재합니다.

하나의 사전에서 다른 값으로 이동하는 동안 원래 사전의 값을 삭제할 수 없다는 불변 조건이있을 수 있습니다 (또는 값은이지만 그보다 조금 더 어렵습니다 ConncurrentDictionary으로 보장 할 수 있습니다.