나는 스레딩 프로젝트를위한 간단한 캐싱을 구현하기 위해 .Net4에서 새 ConcurrentDictionary를 사용하기 시작했습니다..Net4 Gem : The ConcurrentDictionary - 팁 & 트릭
하지만 내가 사용하고있을 때주의해야 할 점이 있습니까?
사용 경험이 있습니까?
나는 스레딩 프로젝트를위한 간단한 캐싱을 구현하기 위해 .Net4에서 새 ConcurrentDictionary를 사용하기 시작했습니다..Net4 Gem : The ConcurrentDictionary - 팁 & 트릭
하지만 내가 사용하고있을 때주의해야 할 점이 있습니까?
사용 경험이 있습니까?
멤버는 스레드로부터 안전하지만 스레드로부터 안전한 것으로 간주해서는 안됩니다. 예를 들어, 다음은 스레드로부터 안전하다고 기대할 수 없습니다.
if (!dictionary.ContainsKey(key))
{
// Another thread may have beaten you to it
dictionary.Add(key, value);
}
대신 새 스레드 안전 API를 사용하십시오. AddOrUpdate
(경쟁 조건 일 경우 마지막 하나임) 또는 GetOrAdd
(경쟁 조건이 발생하면 첫 번째 승리).
ConcurrentDictionary는 스레드로부터 안전합니다. 여러 스레드에서 사용할 때조차도 걱정할 필요가 없습니다.
'GetOrAdd()'와'AddOrUpdate()'에서 사용 된 값 factory methods는 threadsafe가 아니기 때문에 여기에 사려 깊음이 여전히 필요합니다. – roken
지금까지 동시 컬렉션 개체에는 아무런 문제가 없었습니다. 그들은 이 아닌이 컬렉션에 대한 동시성 문제와 응용 프로그램 논리 작성에 집중하는 것을 허용함으로써 생산성을 크게 향상시킵니다.
이것은 문제가 없다는 것을 의미하지 않습니다. 내가 밟은 게 아무것도 없어.
카오스 +1 +1 – SDReyes
매우 유용합니다 Joe Thanks! +1 – SDReyes
이것은 받아 들인 대답보다 훨씬 더 좋은 대답입니다. – Martin
나는 더 많은 응답을 기다릴거야, 마틴. 감사합니다 :) – SDReyes