2010-02-02 3 views
2

Monitor.Wait (object obj)를 사용할 때 obj에 무엇을 사용해야합니까? 이 article에서 멀티 스레딩에 대해 .NET에서 읽고 있습니다. 작성자는 모니터 잠금으로 만 사용되는 새 Object()를 인스턴스화합니다. 실제로 이것을해야합니까, 아니면 두 개 이상의 스레드간에 공유되는 실제 변수를 모니터링하는 것이 더 일반적입니까?모니터는 어떤 객체를 기다려야합니까?

답변

4

예, 일반적으로 나는 그 목적으로 특별히 생성 된 새 개체를 잠급니다. 또한 그것이 개인적이고 정적인지 확인하고 이 아닌 Type 개체를 확인합니다. 또한 변수 또는 객체를 실제로 "잠금"하지 않고 다중 스레드에서 코드 블록의 실행을 막는 토큰으로 잠금을 사용한다는 것을 인식하는 것이 중요합니다.

(현재 인스턴스는 C#을 사용하는 경우) 인스턴스에 대한 액세스 권한이있는 코드는 잠금을 설정하여 교착 상태가 발생할 가능성이 있기 때문에 덜 바람직합니다. 자신 만의 잠금 객체를 생성함으로써 완벽하게 제어 할 수 있습니다.

Here's an informative article 여기에 일부 이유가 설명되어 있습니다.

+0

정적 인 이유는 무엇입니까? 모든 인스턴스를 그렇게 할 필요가 없을 때 잠글 수 있습니다. – MaLio

+0

인스턴스 수준 잠금은 코드가 해당 인스턴스에서 잠금을 획득하지 못하도록합니다. 그러면 서로 다른 스레드의 코드가 여러 인스턴스에서 동일한 코드를 호출하여 잘못된 상태가 발생할 수 있습니다. –

2

문자열 객체과 같은 앱 도메인간에 공유되기 때문에 문자열 객체를 잠그는 것도 좋지 않습니다. 유형 객체. 이렇게하면 앱 도메인이 둘 이상인 경우 불필요한 경합이 발생할 수 있습니다.

관련 문제