2009-09-24 4 views
4

Lock은 System.Threading.Monitor의 간접적 인 표현입니다. 모니터를 직접 사용하려는 경우 추가 이점을 얻을 수 있습니다. (기사를 읽었습니다. 항상 추가로 얻을 모니터를 사용하여 제안 benefits.But 이러한 혜택의 아무런 설명도) 당신이 lock 자신을을 제한 당신이 사용할 수 없습니다, 그래서 만약C# - System.Threading의 장점 스레드를 제어하는 ​​모니터

답변

5

글쎄, lock 만, Monitor.EnterMonitor.Exit 호출이 없다 Monitor.Wait, Monitor.Pulse 등과 같은 유용한 기능이 있습니다. 그렇지 않으면을 수동으로 사용하는 대신 lock을 사용하는 데 실제로 어떤 단점도 없습니다및 Monitor.Exitlock에는 try-finally 블록에 적절한 코드가 자동으로 삽입된다는 이점이 있습니다.

10

lock 문은 모니터 클래스의 EnterExit 메서드에 대한 구문 설탕입니다. 당신은 당신이 사용하려는 경우 직접 모니터를 사용 (적어도 내 지식)을 TryEnter 방법을 비 차단해야한다

lock(x) { 
    Monitor.Pulse(x); 
    Monitor.Wait(x); 
} 

다음과 같이 당신은 여전히 ​​PulseWait을 사용할 수 있습니다

.

내가해야 할 단언에 동의하지 않습니다. 항상을 사용하십시오. Monitor; lock 키워드는 제공하는 것을 수행 할 필요가있을 때 편리합니다.

3

Monitor 클래스는 모니터 동기 프리미티브 http://en.wikipedia.org/wiki/Monitor_%28synchronization%29을 구현합니다. 당신이 정말로 볼 수 있듯이 .Net/C# 아이디어, 그 널리 알려진 개념 - 모든 컴퓨팅 학위의 일부로 가르쳐. 임계 영역을 잠글 수있는 기능뿐만 아니라 주어진 인스턴스에 대한 내부 큐 구현을 제공하여 스레드간에 훨씬 복잡한 상호 작용을 가능하게합니다.

무엇을 사용해야하는지에 대한 대답은 일반적으로 작업을 수행하는 가장 간단한 방법인데, 90 %를 초과하는 경우에는 lock(sth){...} 구문을 사용하는 것이 가장 좋습니다.