2012-06-22 2 views
3

Monitor.EnterMonitor.TryEnter의 올바른 동작에 대해 뭔가 빠졌다고 생각합니다. 여기에 내가 코드의 나머지 부분에서 문제를 분리하기 위해 작성한 코드의 일부는 다음과 같습니다Monitor.TryEnter는 Monitor.Enter 후에도 항상 true를 반환합니다.

object lockObj = new object(); 
bool result = Monitor.TryEnter(lockObj); 
Console.Write(result); 

결과는 항상 true입니다. 여기에 놀라움이 없습니다.

object lockObj = new object(); 
Monitor.Enter(lockObj); 
bool result = Monitor.TryEnter(lockObj); 
Console.Write(result); 

그러나 이번에도 true입니다. Monitor.Enter 이후에 lockObj이 잠겼습니까? 이걸 좀 신선한 모습으로 보여주세요.

답변

7

동일한 스레드에서이 작업을 수행하고 있기 때문입니다. 같은 스레드가 차단하지 않고 한 번 이상 입력 호출하는

그것은 합법적이다;

또한 (MSDN)는 것을 명심 그러나, 종료 통화의 동일한 수는 는

+3

당신 말이 맞습니다. 나는'Monitor.TryEnter'의 [documentation] (http://msdn.microsoft.com/en-us/library/4tssbxcw)에 대해 좀 더 명시해야한다고 생각합니다. – rotman

0

항상 재 enterant 코드를 허용하는 데 (reaquire 할 수있는 모니터를 획득 이미 한 동일한 스레드를 차단하는 오브젝트를 기다리는 다른 스레드 전에 호출해야합니다).

관련 문제