Ejemplo n.º 1
0
    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;
            }
        }
    }
Ejemplo n.º 2
0
    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}");
    }