나는이 주제가 너무 많은 게시물을 읽었을뿐 아니라 다른 곳에서도 읽을 수 있지만 아직 확실한 답변을 찾지 못했기 때문에 내 사과가 당신이 있다면 이 여분의 중복으로 인해 불쾌감을 느낀다.한 번 쓰기, 많은 읽음 잠금
일회성의 수백만 읽기 리소스가있는 상황이 있습니다. 리소스는 생성하는 데 극도로 비싸며 쓰기 잠금에 대한 경합도 매우 높을 수 있습니다. 또한, 어떤 프로세서가 실행될 지 예측할 수 없으므로 메모리 모델이 무엇인지 알지 못합니다. .NET 3.5, .NET 4.0 및 Mono 2.10에서 빌드 된 어셈블리의 3 가지 버전을 컴파일 중입니다.
자원에 대한 높은 경쟁 때문에 가능한 한 효율적으로 만들 필요가 있습니다. 적어도 읽기에는 잠금 해제 패턴을 사용하고 싶습니다. 리소스를 만드는 이중 잠금 확인 패턴을 이해하지만 메모리 장벽 외부의 _resource 액세스로 인해 (모든 프로세서에서) 작동하는지 여부에 대한 의견 차이가있었습니다. _resource 필드에서 volatile을 사용해야합니까? ReaderWriterLockSlim이이 시나리오에 더 잘 맞습니까? 다른 질문이 있습니까?
if(_resource == null)
{
return _resourceDefault;
}
return _resource.GetSomething();
여기에 잠금 기능이있는 이유는 무엇입니까? – leppie
리소스를 생성하는 비용이 매우 비싸고 여러 번 할 수 없습니다. 연결을 추적하는 서버와의 원격 통신을 포함합니다. –
글쎄, 스레드가 읽기 전에 일찍 끝내야합니다. 잠금 장치가 필요 없습니다. 이 모든 것이 너무 모호하여 구체적인 조언을 제공하지 않습니다. –