조건을 테스트하는 것이 좋습니다. 그런 다음 조건을 다시 테스트하십시오 [복제]

StackOverflow https://stackoverflow.com/questions/5036518

문제

가능한 중복 :
.NET 의 이중 검사 된 잠금

편집 : 이 질문을 명확히하기 위해 많은 편집 에 관한 것이 아닙니다

나는 이렇게 코드를 쓰는 것을 찾는다 :

    if(resourceOnDiskNeedsUpdating)
    {
        lock(lockObject)
        {
            if(resourceOnDiskNeedsUpdating) // has a previous thread already done this?
                UpdateResourceOnDisk();
        }
    }
    return LoadResourceFromDisk();
.

UpdateResource()는 느리게 작동합니다. 이 패턴이 의미가 있습니까?
더 나은 대안이 있습니까?

도움이 되었습니까?

해결책

This called "double-checked locking".

You need a memory fence to make it correct.

See Wikipedia's article on double checked locking in .NET

다른 팁

An alternative I use would be to just use the 'volatile' keyword. http://msdn.microsoft.com/en-us/library/x13ttww7%28v=vs.71%29.aspx

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top