Monitor.Wait (object obj)를 사용할 때 obj에 무엇을 사용해야합니까? 이 article에서 멀티 스레딩에 대해 .NET에서 읽고 있습니다. 작성자는 모니터 잠금으로 만 사용되는 새 Object()를 인스턴스화합니다. 실제로 이것을해야합니까, 아니면 두 개 이상의 스레드간에 공유되는 실제 변수를 모니터링하는 것이 더 일반적입니까?모니터는 어떤 객체를 기다려야합니까?
2
A
답변
4
예, 일반적으로 나는 그 목적으로 특별히 생성 된 새 개체를 잠급니다. 또한 그것이 개인적이고 정적인지 확인하고 이 아닌 Type 개체를 확인합니다. 또한 변수 또는 객체를 실제로 "잠금"하지 않고 다중 스레드에서 코드 블록의 실행을 막는 토큰으로 잠금을 사용한다는 것을 인식하는 것이 중요합니다.
(현재 인스턴스는 C#을 사용하는 경우) 인스턴스에 대한 액세스 권한이있는 코드는 잠금을 설정하여 교착 상태가 발생할 가능성이 있기 때문에 덜 바람직합니다. 자신 만의 잠금 객체를 생성함으로써 완벽하게 제어 할 수 있습니다.
Here's an informative article 여기에 일부 이유가 설명되어 있습니다.
2
문자열 객체과 같은 앱 도메인간에 공유되기 때문에 문자열 객체를 잠그는 것도 좋지 않습니다. 유형 객체. 이렇게하면 앱 도메인이 둘 이상인 경우 불필요한 경합이 발생할 수 있습니다.
관련 문제
- 1. 액션을 시작하기 전에 기다려야합니까?
- 2. Firebug 네트워크 모니터는 어떻게 작동합니까?
- 3. TTimer가 끝날 때까지 어떻게 기다려야합니까?
- 4. Django가 Python 3을 지원하기를 기다려야합니까?
- 5. jquery는 정확히 어떤 객체를 반환합니까?
- 6. guice는 어떤 클래스에 객체를 주입합니까?
- 7. 성능 모니터는 :(... 내가 성능 모니터를 부러
- 8. Windows 용으로 권장되는 HTTP 트래픽 모니터는 무엇입니까?
- 9. 특정 디렉토리에 대한 모니터는 어떻게 만듭니 까?
- 10. 네트워크 스트림에서 데이터를 읽을 때까지 어떻게 기다려야합니까?
- 11. Qt QMainWindow가 닫혀있을 때 어떻게 기다려야합니까?
- 12. cocoa-touch : 어떤 객체를 만졌는지 확인하는 방법
- 13. 잃어버린 jQuery 객체를 찾는데 어떤 트릭이 있습니까?
- 14. Chrome 확장 콘텐츠 스크립트에서 문서를 처리하기 전에 document.ready를 기다려야합니까?
- 15. 코드를 실행하기 전에 slideToggle이 완료 될 때까지 어떻게 기다려야합니까?
- 16. 'this'키워드는 다른 함수 안에있는 함수 내의 어떤 객체를 참조합니까?
- 17. 어떤 방법으로 자바 스크립트 객체를 만드는 것이 더 좋습니까?
- 18. 참조 데이터의 하위 객체를 만들려면 어떤 유형이 필요합니까?
- 19. 팩토리는 어떤 유형의 객체를 만들지 어떻게 알 수 있습니까?
- 20. appendChild()를 통해 어떤 JS 객체를 추가 할 수 있습니까?
- 21. ActionExecutingContext 객체를 사용하여 어떤 액션이 실행되는지 어떻게 알 수 있습니까?
- 22. int로부터 Integer 객체를 생성 할 때 어떤 값이 있습니까?
- 23. Java에서 Map 키로 임의의 객체를 사용하면 어떤 단점이 있습니까?
- 24. Mac OS X 활동 모니터는 어떻게 구현됩니까? 동일한 API를 사용할 수 있습니까?
- 25. DOM 객체를 전달하여 JQuery 객체를 생성 하시겠습니까?
- 26. 인터페이스와 그 객체를 구현하는 모든 객체를 테스트해야합니까?
- 27. 델파이 : 배열 객체를 포함하여 객체를 XML로 스트림
- 28. PHP가 새 객체를 만들거나 기존 객체를 사용한다면?
- 29. 매번 새로운 객체를 만들거나 하나의 객체를 만들어야합니까?
- 30. 파일 업로드 중에 어떤 일이 발생합니까?
정적 인 이유는 무엇입니까? 모든 인스턴스를 그렇게 할 필요가 없을 때 잠글 수 있습니다. – MaLio
인스턴스 수준 잠금은 코드가 해당 인스턴스에서 잠금을 획득하지 못하도록합니다. 그러면 서로 다른 스레드의 코드가 여러 인스턴스에서 동일한 코드를 호출하여 잘못된 상태가 발생할 수 있습니다. –