Пример #1
0
        /// <summary>
        /// 동일 자원을 여러 스레드가 공유자원에 접근가능할 때, 공유자원 사용허가를 받은 임의의 스레드가 공유자원을 사용한다.
        /// (스레드 Start 순서가 아닌, 공유자원이 사용허가 신청을 하고 허가를 받은 스레드)
        /// </summary>
        /// <remarks>
        ///   + 모든 스레드에 동일 객체인스턴스 할당 : 동일 객체인스턴스이므로, 스레드마다 객체인스턴스의 멤버변수에 다른 값을 가질 수 없음.
        ///   + 스레드에 각기 다른 객체인스턴스 할당 : 초기값이 공유자원이면 공유되지 않음.(공유자원이 초기값인 경우, 공유자원이 매번 초기값으로 초기화)
        /// </remarks>
        /// <param name="args"></param>
        private static void ThreadStartForLockByMutex(params int[] args)
        {
            Thread[]     threads = new Thread[args.Length];
            AccountMutex obj     = new AccountMutex(10000);//모든 스레드에 동일 객체인스턴스 할당

            for (int i = 0; i < args.Length; i++)
            {
                //AccountMutex obj = new AccountMutex(10000);//스레드에 각기 다른 객체 인스턴스 할당.
                obj.maxCnt      = args[i];//모든 스레드에 동일객체 인스턴스 할당의 경우, 스레드마다 다른 maxCnt 설정 안됨.
                threads[i]      = new Thread(obj.ShowData);
                threads[i].Name = "Thread - " + Convert.ToChar(65 + i);
            }

            foreach (var t in threads)
            {
                t.Start();
            }
        }
Пример #2
0
        /// <summary>
        /// 동일 자원을 여러 스레드가 공유자원에 접근가능할 때
        /// </summary>
        private static void ThreadStartForLockByMutex()
        {
            // 3개의 영업장
            Thread[] threads = new Thread[3];
            // 회사 계좌
            AccountMutex obj;

            obj = new AccountMutex(10000);

            for (int i = 0; i < threads.Length; i++)
            {
                threads[i]      = new Thread(new ThreadStart(obj.Transactions));
                threads[i].Name = $"지점 [{i}]";
            }

            for (int i = 0; i < threads.Length; i++)
            {
                threads[i].Start();
            }
        }