2009-06-16 4 views
5

내 코드가 잠겨 있습니다.
두 스레드가 동시에 실행됩니다. 스레드가 해당 객체를 잠그고 있는지 어떻게 알 수 있습니까?개체가 잠겨있는 경우 어떻게 찾습니까? C#

private readonly object _lockObject = new Object(); 

// Both methods running 
public void Method1() 
{ 
    if(certainCriteria) 
    { 
     lock(_lockObject) 
     { 
     //doWork; 
     } 
    } 
} 

// Both methods running 
public void Method2() 
{ 
    if(isLocked?(_lockObject)) 
    { 
     //doWork; 
    } 
} 

누구나 isLocked를 보유하고 있습니까? 방법?

미리 감사드립니다.

답변

8

당신 사용 Monitor.TryEnter합니다 (0 시간 제한, 또는 전혀 제한을하지 않는 과부하)하고 성공하면 즉시 Monitor.Exit 전화 - 그러나 나는 이것이 일반적으로 나쁘다라고 말하고 싶지만 디자인 냄새. 특히, 데이터는 즉시 반환됩니다.

달성하려는 목표는 무엇입니까?

+0

@ 존 : Yaow가 너무 빠르며, yaaw (검은 국가 악센트를 관리 할 수 ​​있다면 더 잘 읽음)입니다. 그것은 거대한 경고를 통해 제안하려고했던 것이 었습니다. "그것은 우리가"자물쇠가 어떻게 작동하는지 "알고있는 기초 위에서 작동합니다. – AnthonyWJones

+0

저는 잠금 장치가 작동하는 방식을 아는 것에 달려 있다는 사실에 특별히 신경 쓰지는 않습니다. 그것은 그것이 틀린 명백한 느낌입니다. 유용하다고 생각되는 상황이 있지만 실제로 사용되는 곳보다 적을 수도 있습니다. –

+0

안녕 다시 Jon! BufferManager를 구현 중입니다. 기본적으로 버퍼 스택이 있습니다. 스레드 pop()이 스택이고 비어있는 경우 - 스레드가 스택을 채우는 동안 모든 스레드가 다음 pop()에서 대기하도록합니다. 채워지면 다른 모든 스레드가 계속 팝업됩니다. 비록 메커니즘을 잠금 C# 확실하지 오전! – divinci

관련 문제