2012-04-09 4 views
1

디버거에서 코드 줄을 실행할 때 "동결"합니다 : lock (myvar) 분명히 다른 사람이 myvar을 보유하고 있습니다. 그러나 나는이 줄에서 myvar을 무료로 여길 것으로 기대한다. 그래서 코드의 어느 부분이 myvar (다른 스레드에서 diffenetely)을 보유하고 있는지 알고 싶습니다. 어떻게해야합니까? 내가 (다른 스레드가 하나 밖에 없기 때문에) 어느 스레드가 그것을 보유하고 있는지는 알지만 어디서부터인지 모른다.문제를 해결하는 방법 : 왜 잠금을 얻을 수 없습니까?

UPD 해결, 나는 lock() 문 잠금 스레드 쿼리 지원하지 않습니다 Monitor 클래스를 사용 Monitor.Exit(myvar)Monitor.TryEnter(myvar)

+1

에 볼 수 ?? –

+0

@AndrewBarber 다른 잠금 문은 하나 뿐이며 잠금 유지 방법을 이해할 수 없습니다. 그래서 나는 문제가 있음을 디버거에서 확인하고 싶다 .... 나는 Console.Writeln ("get lock")과 Console.Writeln ("release lock") 추적을 추가하기로 결정했다. ... – javapowered

+0

그 콘솔. Writeline()는 꽤 비싸고 타이밍을 바꿀 수 있습니다. –

답변

2

한 후 전화를 잊어 버렸습니다.
Fx 4.5에서는 Monitor.IsEntered(myVar)을 확인할 수 있지만 그게 전부입니다.

나머지는 코드 논리에서 나온 것입니다. 당신이 Visual Studio 2010를 사용하는 경우

+0

'Monitor.IsEntered' 메소드가 있습니까? – Jon

+0

@ 존 .NET 4.5를 사용하는 경우에만. – hangy

+0

@ 존 - 최신 버전입니다. 편집 됨. –

3

당신은 당신의 코드가 있는가 얼마나 많은 잠금 문 Parallel Stacks

+0

어떻게 그것을 사용하여 내 변수를 "잠금"스레드 또는 장소를 찾을 수 있습니까? – javapowered

+0

어떤 스레드가 실행 중인지 알 수 있습니다 * 이제 * 검색을 줄이거 나 지역화 할 수 있습니다 ... Monitor.IsEntered'와 마찬가지로 모니터가 이미 잠겨 있지만 다른 질문은 ... – Tigran

관련 문제