2010-04-20 2 views
12

나는 스레딩 프로젝트를위한 간단한 캐싱을 구현하기 위해 .Net4에서 새 ConcurrentDictionary를 사용하기 시작했습니다..Net4 Gem : The ConcurrentDictionary - 팁 & 트릭

하지만 내가 사용하고있을 때주의해야 할 점이 있습니까?

사용 경험이 있습니까?

답변

20

멤버는 스레드로부터 안전하지만 스레드로부터 안전한 것으로 간주해서는 안됩니다. 예를 들어, 다음은 스레드로부터 안전하다고 기대할 수 없습니다.

if (!dictionary.ContainsKey(key)) 
{ 
    // Another thread may have beaten you to it 
    dictionary.Add(key, value); 
} 

대신 새 스레드 안전 API를 사용하십시오. AddOrUpdate (경쟁 조건 일 경우 마지막 하나임) 또는 GetOrAdd (경쟁 조건이 발생하면 첫 번째 승리).

+0

매우 유용합니다 Joe Thanks! +1 – SDReyes

+0

이것은 받아 들인 대답보다 훨씬 더 좋은 대답입니다. – Martin

+0

나는 더 많은 응답을 기다릴거야, 마틴. 감사합니다 :) – SDReyes

-1

ConcurrentDictionary는 스레드로부터 안전합니다. 여러 스레드에서 사용할 때조차도 걱정할 필요가 없습니다.

+0

'GetOrAdd()'와'AddOrUpdate()'에서 사용 된 값 factory methods는 threadsafe가 아니기 때문에 여기에 사려 깊음이 여전히 필요합니다. – roken

2

지금까지 동시 컬렉션 개체에는 아무런 문제가 없었습니다. 그들은 이 아닌이 컬렉션에 대한 동시성 문제와 응용 프로그램 논리 작성에 집중하는 것을 허용함으로써 생산성을 크게 향상시킵니다.

이것은 문제가 없다는 것을 의미하지 않습니다. 내가 밟은 게 아무것도 없어.

+0

카오스 +1 +1 – SDReyes

관련 문제