2017-10-06 11 views
2

잠금 인수에서 오브젝트의 목적은 무엇입니까?Lock 문 인수의 오브젝트 목적

public class TestThreading 
{ 
    private System.Object lockThis = new System.Object(); 

    public void Process() 
    { 

     lock (lockThis) 
     { 
      // Access thread-sensitive resources. 
     } 
    } 

} 

는 ...이 'lockThis'개체가 잠금 몸에 아무것도 통과 않습니다 예를 들면 다음과 같습니다. 인수에 객체가없는 Lock 문을 사용할 수없는 이유는 무엇입니까?

+1

어떤 스레드가 잠금을 소유하고 얼마나 자주 입력되었는지 추적하는 * 변수가 필요합니다. 잠금 상태입니다. System.Object는 이러한 모든 작업을 수행하는 데는 겉으로보기에는 부적합한 유형의 개체이지만 가능합니다. 많은 프로그래머는 .NET Framework가 이런 종류의 변수에 대한 명확한 유형을 가져야한다고 주장했습니다. public class LockState : object {}를 만들 수 있습니다. –

+0

감사합니다. 대신 "Thread.CurrentThread.ManagedThreadId"를 lock 문에 전달하면 의미가 있습니다. – cembo

+1

그것은 재앙이 될 것입니다. 이 공부를 더 잘하거나 스레딩이 당신을 먹을 것입니다. –

답변

3

lock 문에 전달 된 객체는 잠금 식별자로 간주 할 수 있습니다. 모든 오브젝트의 경우, 단일 스레드 만이 주어진 시간에 해당 오브젝트에 대한 배타적 잠금을 확보 할 수 있습니다. 객체를 lock 문으로 전달할 수있게함으로써 중요한 코드 영역마다 다른 객체를 사용할 수 있습니다.

Monitor.Enter 설명서는 lock 문 설명서보다 개체 사용에 대해 더 잘 설명합니다.