C#에서 멀티스레딩을 활용하면 여러 작업을 동시에 처리할 수 있어 프로그램의 효율성이 크게 향상됩니다. 이번 글에서는 System.Threading 네임스페이스를 사용해 가장 기본적인 형태의 스레드를 생성하고 실행하는 방법을 단계별로 알아보겠습니다.
1. 스레드에서 실행할 함수 작성하기
스레드를 생성하려면 먼저 해당 스레드가 실행할 메서드(함수)가 필요합니다. 아래와 같이 간단한 함수를 하나 작성해 보겠습니다.
public void myThread() {
for (int i = 0; i < 3; i++) {
Console.WriteLine("My Thread");
}
}이 함수는 "My Thread"라는 문자열을 총 3번 출력하는 역할을 합니다.
2. ThreadStart 델리게이트로 스레드 생성하기
작성한 함수를 스레드에서 실행하려면 ThreadStart 델리게이트를 사용해야 합니다. 먼저 클래스의 인스턴스를 만들고, 그다음 새로운 Thread 객체를 생성합니다.
Demo d = new Demo();
Thread thread = new Thread(new ThreadStart(d.myThread));
여기서 ThreadStart 델리게이트는 매개변수가 없고 반환값도 없는(void) 메서드를 가리키는 역할을 합니다. 즉, myThread 메서드가 스레드의 시작 지점이 되는 것입니다.
3. 전체 예제 코드
지금까지 설명한 내용을 모두 포함한 완전한 코드는 다음과 같습니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
class Demo {
public void myThread() {
for (int i = 0; i < 3; i++) {
Console.WriteLine("My Thread");
}
}
}
class NewThread {
public static void Main() {
Demo d = new Demo();
Thread thread = new Thread(new ThreadStart(d.myThread));
thread.Start();
Console.Read();
}
}
코드 실행 흐름 살펴보기
- Thread 객체 생성: ThreadStart 델리게이트에 실행할 메서드(myThread)를 전달하여 스레드 객체를 만듭니다.
- thread.Start() 호출: Start() 메서드를 호출하는 순간 스레드가 시작되고, 별도의 실행 흐름에서 myThread 함수가 동작합니다.
- Console.Read(): 메인 스레드가 종료되기 전에 사용자 입력을 대기하여, 새로 생성된 스레드의 출력 결과를 화면에서 확인할 수 있도록 합니다.
4. 실행 결과
위 프로그램을 컴파일하고 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
My Thread
My Thread
My Thread
마무리
C#에서 스레드를 생성하는 기본 과정은 크게 세 단계로 요약할 수 있습니다. 첫째, 스레드가 실행할 메서드를 정의하고, 둘째, ThreadStart 델리게이트를 통해 Thread 객체를 생성하며, 셋째, Start() 메서드로 스레드를 실행하는 것입니다. 이 기본 개념을 잘 익혀두면 이후 매개변수 전달, 스레드 동기화, ThreadPool 활용 등 더 고급 멀티스레딩 기법으로 확장하기가 훨씬 수월합니다.