가 멀티 스레드 c#에서 문제가되는지
Microsoft의 문서는 해당 객체가 공개적으로 액세스 할 수있는 경우 객체 액세스를 보호하기 위해 를 사용하는 것을 권장합니다. 이 권고의 배후에 대한 이유를 탐색합시다. lock(this)
:
를 사용하는 주요 위험
lock(this)
통제되지 않은 잠금 : 공개적으로 액세스 가능한 객체는 lock(this)
코드가 에서 잠금을 얻을 수 있습니다. 이것은 예측할 수없는 동기화 문제의 문을 열어서 멀티 스레드 코드를 올바르게 설계하고 디버깅하기가 매우 어렵게 만듭니다.
개인 필드 및 전용 잠금 객체 사용이 일반적으로 선호됩니다. 이 접근법은 액세스 제어를 강화하고 잠금 메커니즘을 내부를 유지하여 캡슐화를 유지합니다. this
키 로만 작동합니다. 다른 스레드가 잠금을 보유하면 후속 시도가 차단되지만 객체 자체는 수정 가능합니다.
예시 예 :
이 c# 코드를 고려하십시오 :
lock(this)
이 예제는 문제를 강조합니다.
위 내용은 Multithreaded C#에`lek (this)`를 사용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!