스레드(Thread)란 프로그램의 실행 경로를 의미합니다. 각 스레드는 고유한 제어 흐름을 정의하며, 애플리케이션이 복잡하고 시간이 오래 걸리는 작업을 처리할 때 여러 실행 경로, 즉 스레드를 나누어 각 스레드가 특정 작업을 전담하도록 구성하는 것이 매우 유용합니다.
스레드는 '경량 프로세스(lightweight process)'라고도 불립니다. 현대 운영체제가 동시성 프로그래밍(Concurrent Programming)을 구현하는 대표적인 수단이 바로 스레드이며, 스레드를 활용하면 CPU 사이클 낭비를 줄이고 애플리케이션의 전반적인 효율을 크게 향상시킬 수 있습니다.
C#에서 스레드 다루기
C#에서는 System.Threading.Thread 클래스를 사용해 스레드를 다룹니다. 이 클래스를 통해 멀티스레드 애플리케이션에서 개별 스레드를 생성하고 접근할 수 있습니다. 프로세스에서 가장 먼저 실행되는 스레드를 메인 스레드(Main Thread)라고 부릅니다.
C# 프로그램이 실행을 시작하면 메인 스레드가 자동으로 생성됩니다. 이후 Thread 클래스를 사용해 만든 스레드들은 메인 스레드의 자식 스레드(Child Thread)가 됩니다. 현재 실행 중인 스레드에 접근하려면 Thread 클래스의 CurrentThread 속성을 사용하면 됩니다.
스레드 ID 확인하기
현재 실행 중인 스레드의 ID를 확인하려면 ManagedThreadId 속성을 사용합니다. 이 속성은 현재 프로세스 내에서 해당 관리 스레드를 고유하게 식별하는 정수 값을 반환하며, 스레드의 수명 동안 그 값이 변하지 않습니다.
아래 예제는 CurrentThread 속성으로 현재 스레드를 가져온 뒤, 스레드 이름과 관리 스레드 ID를 콘솔에 출력하는 코드입니다.
예제 코드
class Program{
public static void Main(){
Thread thr;
thr = Thread.CurrentThread;
thr.Name = "Main thread";
Console.WriteLine("Name of current running " + "thread: {0}", Thread.CurrentThread.Name);
Console.WriteLine("Id of current running " + "thread: {0}", Thread.CurrentThread.ManagedThreadId);
Console.ReadLine();
}
}실행 결과
Name of current running thread: Main thread
Id of current running thread: 1
위 결과에서 알 수 있듯이, 프로그램 시작 시 자동 생성된 메인 스레드의 이름은 'Main thread'로 지정되었으며, ManagedThreadId 값은 1로 출력됩니다. 참고로 스레드의 Name 속성은 한 번만 설정할 수 있으므로, 이미 이름이 지정된 스레드에 다시 설정을 시도하면 예외가 발생할 수 있다는 점도 기억해 두면 좋습니다.