Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 멀티스레딩 완벽 가이드: 스레드의 개념과 생명주기

C# 멀티스레딩이란?

스레드(Thread)는 프로그램의 실행 경로로 정의됩니다. 각 스레드는 프로그램 내에서 독립적이고 고유한 제어 흐름을 담당하며, 하나의 프로세스 안에서 여러 작업을 동시에 처리할 수 있게 해줍니다.

C#에서는 System.Threading.Thread 클래스를 사용해 스레드를 생성하고 관리합니다. 이 클래스를 활용하면 멀티스레드 애플리케이션에서 개별 스레드를 만들고 제어할 수 있습니다. 참고로, 프로세스에서 가장 먼저 실행되는 스레드를 메인 스레드(Main Thread)라고 부릅니다.

스레드의 생명주기(Life Cycle)

스레드의 생명주기는 System.Threading.Thread 클래스의 객체가 생성되는 시점에 시작되며, 해당 스레드가 종료되거나 실행을 완료하면 끝납니다.

스레드의 생명주기에는 다음과 같은 네 가지 주요 상태가 있습니다.

1. 시작되지 않은 상태 (Unstarted State)

스레드 인스턴스가 생성되었지만 아직 Start() 메서드가 호출되지 않은 상태입니다.

2. 준비 상태 (Ready State)

스레드가 실행할 준비를 마치고 CPU 시간(CPU Cycle) 할당을 기다리고 있는 상태입니다.

3. 실행 불가능 상태 (Not Runnable State)

스레드가 현재 실행될 수 없는 상태로, 다음과 같은 경우에 해당합니다.

  • Sleep() 메서드가 호출된 경우
  • Wait() 메서드가 호출된 경우
  • I/O 작업으로 인해 차단(Blocked)된 경우

4. 종료 상태 (Dead State)

스레드가 실행을 모두 완료했거나 중단(Abort)된 상태입니다. 이 상태에 진입한 스레드는 다시 시작할 수 없습니다.

C# 스레드 생성 예제

다음은 C#에서 현재 실행 중인 스레드에 접근하고 이름을 지정하는 방법을 보여주는 기본 예제입니다.

using System;
using System.Threading;

namespace Demo {
    class Program {
        static void Main(string[] args) {
            // 현재 실행 중인 스레드 가져오기
            Thread th = Thread.CurrentThread;
            th.Name = "MainThread";

            Console.WriteLine("This is {0}", th.Name);
            Console.ReadKey();
        }
    }
}

실행 결과

This is MainThread

위 예제에서 Thread.CurrentThread 속성을 사용하면 현재 실행 중인 스레드 객체를 가져올 수 있으며, Name 속성을 통해 스레드에 식별 가능한 이름을 부여했습니다. 이처럼 C#의 Thread 클래스는 이름 설정 외에도 우선순위(Priority), 백그라운드 여부(IsBackground) 등 다양한 속성과 메서드를 제공하여 스레드를 세밀하게 제어할 수 있습니다.