2017-04-19 11 views
1

특정 코드를 잠글 수있는 방법을 찾고있었습니다.은 C#에서 여러 객체에 걸쳐 작업을 잠글 수 있습니까?

namespace x 
{ 
    public class y 
    { 
     private Object obj = new Object(); 
     private void A() 
     { 
     lock(obj) 
     { 
      //critical section 
     } 
     } 
    } 
} 

요청에 따라 어플리케이션 내 다른 출처의 방법 A에 진입 (클래스 Y를 사용한다)과 그 로크 대상의 임계 영역을 보호하기 위해 실패 보인다.

여러 개체가 코드 조각에 액세스하려고하는데 정적 잠금 개체를 사용하고 싶지는 않지만 중요한 섹션을 보호 할 방법을 찾고 있습니다.

도와주세요.

+0

정적으로 'obj'를 정의하십시오. – Rob

답변

2

잠금은 작업을 수행하지만 인스턴스 필드를 잠그면 동일한 인스턴스에 대해서만 중요 섹션이 보호됩니다. 모든 인스턴스를 잠 그려면 플래그 (Obj)를 고정 시키십시오.

namespace x 
{ 
    public class y 
    { 
     static private Object obj = new Object(); 

     private void A() 
     { 
      lock(obj) 
      { 
       //critical section 
      } 
     } 
    } 
} 
+0

안녕하세요 tony, 답장을 보내 주셔서 감사합니다. 마지막 줄에서 언급했듯이 정적 인 객체를 사용할 수 없습니다. – bourne

+0

MethodImplAttributeOptions.Synchronized와 함께 MethodImplAttribute를 사용하여 수행 할 수 있습니다. –

+0

@ 보인 문제는 ** 할 수 없습니다 ** 오브젝트 사이의 인스턴스 레벨 잠금을 공유하십시오. 여기에 싱글 톤이 필요합니다. 싱글 톤을위한 정적 필드 또는 IoC 등록입니다. – VMAtm