HttpApplicationState가 동시 액세스를 관리하는 기능이 AcquireRead()/AcquireWrite()
인 방법을 설명하는 기사를 읽었습니다. 어떤 조건에서는 레이스 조건을 피하기 위해 응용 프로그램 개체에 Lock()
및 Unlock()
설명을 사용해야한다고 설명하고 있습니다.HttpApplicationState - 스레드 안전성이 있으면 Race 조건이 존재하는 이유는 무엇입니까?
동시 액세스가 암시 적으로 개체에 의해 처리되는 경우 응용 프로그램 상태에 대한 경쟁 조건이 있어야하는 이유를 이해할 수 없습니다.
누군가 나에게 설명해 주시겠습니까? 내가 Application.Lock()
과 Application.Unlock()
을 사용해야하는 이유는 무엇입니까? 고맙습니다 !
그것은이다 혼란 스럽다. 어떤 종류의 스레드 안전 Microsoft가이 경우에 해당합니까? 'ReaderWriterLock'는 쓰기 연산 ('Add','Set'을 사용)이 수행 될 때 상황을 처리하지 않아야하며, 다른 스레드는 읽을 수 없어야합니다 (잘못된 데이터가 독자에게 제공되는 상황을 보장)? 나는 틀릴 수도 있지만 그러한 상황을 생각할 수는 없습니다. 예제를 제공해 주시겠습니까? – Learner
@CSharpLearner : 위 예에서 읽기 및 쓰기가 있습니다. 각각은 자체적으로 보호되지만 다른 스레드가 쓰기를 수행하기 전에 두 스레드가 서로간에 읽을 수 있습니다. 둘 다 데이터를 가져 와서 추가하려고합니다. – Guffa
감사합니다. 나는 뭔가 다른 것을 생각하고 있었다. 'ReaderWriterLock'에서 한 번에 하나의 쓰레드 만 쓰고 다른 쓰레드는 읽거나 쓰지 못하도록 막을 수 있습니다. 옳은? 따라서 동일한 코드를 사용하는 병렬 스레드는 첫 번째 스레드가 쓰기를 완료 할 때까지 대기합니다. 첫 번째 스레드가 완료되면 다른 스레드의 쓰기 작업이 다시 시작됩니다. 내가 맞습니까? 이 경우 그림에서'FetchInfoFromDatabase()'가 무겁지 않고 시간이 오래 걸리면 명확한 잠금/잠금 해제가 중요할까요? – Learner