private void Ex03_Mointer(object inObj) { // 모니터를 통한 스레드 동기화 // Enter/Exit는 반드시 이런 패턴으로 사용되어야 함. // Enter와 Exit 코드사이에 위치한 모든 코드는 한 순간에 스레드 하나만 진입해서 실행할 수 있음 // 그리고 Enter와 Exit메서드의 인자로 전달하는 값은 반드시 참조형 타입의 인스턴스여야 함(일반 자료형 int, string 같은거 넣으면 크래시남) Ex03_Class c = inObj as Ex03_Class; for (int i = 0; i < 100000; i++) { Monitor.Enter(c); try { c.Num = c.Num + 1; } finally { Monitor.Exit(c); } // lock (c) { c.Num = c.Num + 1; } } }
private void ThreadEx_03() { Ex03_Class c = new Ex03_Class(); Thread t1 = new Thread(Ex03_Mointer); Thread t2 = new Thread(Ex03_Mointer); t1.Start(c); t2.Start(c); t1.Join(); t2.Join(); Debug.Log($"num 개수 : {c.Num}"); }