2010-04-01 4 views
9

공유 리소스를 관리하는 클래스가 있습니다. 이제 리소스에 대한 액세스가 여러 매개 변수에 따라 다르므로이 클래스는 프로그램의 정상적인 실행 중에 여러 번 인스턴스화되고 삭제됩니다.비 정적 클래스에서 정적 변수를 잠글 때도 안전합니까?

공유 리소스는 동시성을 지원하지 않으므로 어떤 종류의 잠금이 필요합니다. 내 마음에 와서 가장 먼저하는 일이 클래스의 정적 인스턴스를 가지고,이 같은, 그 위에 잠금을 획득한다 : 이해

// This thing is static! 
static readonly object MyLock = new object(); 

// This thing is NOT static! 
MyResource _resource = ...; 

public DoSomeWork() { 
    lock(MyLock) { 
     _resource.Access(); 
    } 
} 

합니까를하거나 다른 방법을 사용할 것인가?

답변

6

예 정적 변수를 사용하여 공유 리소스를 보호 할 수 있습니다.

typeof(class) as the expression inside lock을 사용할 수도 있습니다. 아래의 경고를 참조하십시오. 정적 변수는 적어도 클래스 내에서 보호됩니다.

+5

다른 사람이 같은 유형의 잠금을 설정하면 교착 상태가 발생할 수 있으므로 typeof (class)를 잠글 수 없습니다. 적어도 공용 유형에서는 사용하지 마십시오. – driis

+1

@driis : 합의에 따라 답변에 메모를 추가했습니다. 감사. –

+2

+1 "예 ~ 할 수 있습니다 ...", typeof (클래스)에 대한 잠금 제안에 -1, 따라서 0을 합계합니다. – LukeH

관련 문제