안녕하세요. 
시작하세요 c# 7.1 교재의 444페이지 부근의 lock 사용 예를 공부하다가 의문점이 생겨서 질문 드립니다. 
lock문에 객체를 넘겨주는 이유를 잘 모르겠습니다.
아래 코드의 //A 부분을 Program pg = new Program(); 으로 하고 
//B부분을 lock(pg) { 로 변경해도 동일한 결과(공유자원에 대한 스레드 동기화 처리가 되는)를 얻게 되더군요. 
왜 lock이나 Monitor.Enter에 어떠한 객체를 넘겨주는지, 넘길 때 어떠한 객체를 넘겨야 된다는 기준이 있는 것인지 궁금합니다. 
감사합니다.
-------------------------------------------------------------------------------------------------------------------- 
namespace SevenTest
{
    class MyData
    {
        int number = 0;
        
        public int Number { get { return number; } }
        
        
        public object _numberLock = new object(); // A
       
        public void Icrement()
        {
            lock (_numberLock) { //B 
              number++;          
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            MyData data = new MyData();
            Thread t1 = new Thread(threadFunc);
            Thread t2 = new Thread(threadFunc);
            t1.Start(data);
            t2.Start(data);
            t1.Join();
            t2.Join();
            Console.WriteLine(data.Number);
        }
        static void threadFunc(object inst)
        {
            MyData data = inst as MyData;
            for(int i = 0; i < 100000; i++)
            {
               
                    data.Icrement();
               
            }
        }
    }
}
        
        
                    
                    
                    
                    
                    
    
                    
                    
                    
                    
                    
                
                    [최초 등록일: ]
                    [최종 수정일: 6/9/2019]