웹 응용 프로그램에서 파일을 올바르게 처리하려고합니다.이러한 스레드를 올바르게 동기화하는 방법은 무엇입니까?
lock(lockObject)
{
//Download file here.
}
그래서 다운로드의 중앙에서의 "다운로드"에 대한 스레드 대기를 "삭제"동시에 같은 파일이 다른 스레드에서 삭제하려 할 경우 : 파일을 다운로드 할 때 나는 개체에 잠금 먼저 완료 할 스레드 :
lock(lockObject)
{
//Delete file here.
}
이 작업은하지만 또 다른 문제가 있습니다. 두 스레드가 동시에 파일을 다운로드 할 수 없습니다.
여러 스레드가 동시에 "다운로드"코드를 실행할 수 있지만 동시에 "다운로드"스레드가 완료 될 때까지 어떤 스레드도 "삭제"코드를 실행할 수 없도록 만들 수 있습니까?
대답은 어쩌면 Monitor
클래스의 어딘가에 있습니다.하지만 어떻게 해명해야할지 모르겠습니다.
그것은 다운로드 스레드가 어떤 경우에, 그러나 즉 ... 하나의 파일을 다운로드하는 작업을 배포하는 방법을 명확하지, 당신은 아마 관리자 스레드가 잠금을 보유하고 스레드 풀에 작업을 배포 할 것 어떤 식 으로든. 그런 식으로 삭제 스레드는 관리자 스레드가 보유한 잠금을 대기 할 수 있지만 관리자 스레드는 해당 작업자 풀로 원하는 모든 작업을 수행 할 수 있습니다. 질문에 의해 다른 것을 의미하지 않는다면? 끔찍한 것은 아니지만 자세한 내용이 도움이 될 것입니다. –
@ J ... 당신이 무엇을 요구하는지 모르겠습니다. 다운로드 코드는 사용자가 HTTP 요청을 할 때 .NET에서 제공하는 스레드 풀의 일반 스레드에 의해 실행됩니다. 삭제 코드는 매 시간마다 실행되는 서버 측의 정리 작업에 의해 실행됩니다. 어쨌든 그 중 어떤 것도 중요하다고 생각하지 않습니다. – AxiomaticNexus
아니요, 대답은'Monitor' 클래스에 없습니다. 잠재적으로 여러 다운로드 스레드를 허용하기 위해 [ReaderWriterLockSlim] (https://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim (v = vs.110) .aspx)을 사용할 수 있지만 강제로 삭제할 수 있습니다 스레드는 모든 다운로드 스레드가 완료 될 때까지 대기합니다. 하지만 파일을 다운로드 한 직후에 파일을 삭제하려는 이유가 무엇인지, 또는 동일한 파일을 다운로드하는 두 개의 다른 스레드를 어떻게 갖게 될지 명확하지 않습니다. –