스레드 경마 프로그램
스레드 경마 프로그램을 만들어 보도록 하겠습니다. 스레드 경마 프로그램은 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 에 많은 영향이 있기 때문에 적절한 판단이 필요 할 것입니다.
