C# :: For Beginners

[C#] Thread 다뤄보기 – 2. Thread를 이용한 경마프로그램

스레드 경마 프로그램

스레드 경마 프로그램을 만들어 보도록 하겠습니다. 스레드 경마 프로그램은 5 마리의 말이 달리게 됩니다. 말은 하나하나의 스레드로 할당하며 랜덤 함수를 이용해서 달리게 됩니다.

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading; //스레드 네임스페이스 추가

namespace ThreadHorse
{
    class Horse
    {
        //말번호
        private int Number;
 

        public Horse(int Number)
        {
            //클래스생성시말번호
            this.Number = Number;
        }
        public void Go()
        {
            //MITER 입니다.
            int Miter = 0;
 

            while (true)
            {
                //랜덤 함수 생성
                Random rd = new Random(Number);
 

                //50 ~ 150 사이의 난수발생
                Miter += rd.Next(50, 150);
 

                //만약 500 미터를 지났다면
                if (Miter >= 500)
                    break;
 

                //현재 상황
                Console.WriteLine("{0}번 마 {1}미터를 지나고 있습니다.", Number, Miter);
 

                //스레드 휴식
                Thread.Sleep(300);
            }
            Console.WriteLine("{0}번마 골인!!", Number);
        }
    }
 

    class Program
    {
        static void Main(string[] args)
        {
            // 5 마리의 말 생성하기
            Horse HorseOne= new Horse(1);
            Horse HorseTwo= new Horse(2);
            Horse HorseThree= new Horse(3);
            Horse HorseFour= new Horse(4); 
            Horse HorseFive= new Horse(5); 

            //스레드 생성하기
            Thread ThreadOne = new Thread(new ThreadStart(HorseOne.Go));
            Thread ThreadTwo = new Thread(new ThreadStart(HorseTwo.Go));
            Thread ThreadThree = new Thread(new ThreadStart(HorseThree.Go));
            Thread ThreadThree = new Thread(new ThreadStart(HorseFour.Go));
            Thread ThreadThree = new Thread(new ThreadStart(HorseFive.Go));
 

            //스레드 실행 → 출발
            ThreadOne.Start();
            ThreadTwo.Start();
            ThreadThree.Start();
            ThreadFour.Start();
            ThreadFive.Start();
        }
    }
}

 

그럼 이제 Horse클래스를 살펴보도록 하겠습니다.
11 번째 줄에는 말들의 고유번호를 가지고 있습니다. 그렇다면 Go method() 가 실행될 경우의 동작을 살펴봅시다.

 


 

25 번째 줄에 보면 랜덤함수를 발생 하는데 평범하지 않게 객체를 생성하고 있습니다. 바로 말의 고유 번호를 Seed 값으로 배정하였습니다. 그 이유는 같은 시간대에 랜덤 함수를 호출할 경우 값이 동일하게 출력되기 때문입니다. 한번 Seed 값을 배정하지 않고 실행을 해보면 3개의 말이 같은 위치로 달리고 있는 것을 볼 수 있을 것입니다. 38번재 줄에 스레드를 0.3초간 쉬고 있습니다. 만약 무한룹의 상황에서 스레드를 쉬지 않으면 CPU 에 많은 영향이 있기 때문에 적절한 판단이 필요 할 것입니다.

Leave a Reply

Discover more from Dream big, Achieve more.

Subscribe now to keep reading and get access to the full archive.

Continue reading