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

C# 멀티스레딩 완벽 가이드: 스레드의 개념부터 생성과 관리까지

C# 멀티스레딩이란 무엇인가?

멀티스레딩(Multithreading)은 하나의 프로세스 내에서 여러 작업을 동시에 실행할 수 있게 해주는 프로그래밍 기법입니다. C#에서는 System.Threading.Thread 클래스를 사용하여 스레드를 생성하고 제어할 수 있습니다. 이 클래스를 통해 멀티스레드 애플리케이션에서 개별 스레드를 만들고 접근하는 작업이 가능합니다.

메인 스레드(Main Thread)와 자식 스레드

프로세스에서 가장 먼저 실행되는 스레드를 메인 스레드라고 부릅니다. C# 프로그램이 실행되기 시작하면 메인 스레드가 자동으로 생성되며, Thread 클래스를 사용해 새로 만든 스레드들은 모두 이 메인 스레드의 자식 스레드(Child Thread)가 됩니다.

예제 1: 현재 실행 중인 스레드 확인하기

다음 예제는 Thread.CurrentThread 속성을 사용하여 현재 실행 중인 스레드 정보를 가져오고, 이름을 지정한 후 출력하는 방법을 보여줍니다.

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();
        }
    }
}

프로그램이 시작되면 자동으로 생성된 메인 스레드의 이름을 "MainThread"로 설정하고 콘솔에 출력합니다.

예제 2: 자식 스레드 생성 및 관리하기

다음 예제는 ThreadStart 델리게이트를 사용하여 자식 스레드를 생성하고, Thread.Sleep() 메서드로 스레드를 일시적으로 중지하는 방법을 보여줍니다.

using System;
using System.Threading;

namespace MultithreadingApplication {
    class ThreadCreationProgram {
        public static void CallToChildThread() {
            Console.WriteLine("Child thread starts");
            // 스레드를 5000밀리초(5초) 동안 일시 정지
            int sleepfor = 5000;
            Console.WriteLine("Child Thread Paused for {0} seconds", sleepfor / 1000);
            Thread.Sleep(sleepfor);
            Console.WriteLine("Child thread resumes");
        }

        static void Main(string[] args) {
            ThreadStart childref = new ThreadStart(CallToChildThread);
            Console.WriteLine("In Main: Creating the Child thread");

            Thread childThread = new Thread(childref);
            childThread.Start();
            Console.ReadKey();
        }
    }
}

코드 설명

  • ThreadStart 델리게이트: 스레드가 시작될 때 실행할 메서드를 지정합니다. 여기서는 CallToChildThread 메서드가 자식 스레드에서 실행됩니다.
  • Start() 메서드: 새로 생성한 스레드를 실제로 실행합니다.
  • Thread.Sleep(): 지정한 시간(밀리초 단위)만큼 스레드의 실행을 일시 중지합니다. 위 예제에서는 5000밀리초, 즉 5초간 대기합니다.

실행 결과

In Main: Creating the Child thread
Child thread starts
Child Thread Paused for 5 seconds
Child thread resumes

실행 결과를 보면 메인 스레드에서 자식 스레드를 생성한 후, 자식 스레드가 시작되고 5초간 일시 정지했다가 다시 재개되는 과정을 확인할 수 있습니다. 이처럼 C#의 Thread 클래스를 활용하면 여러 작업을 병렬로 처리하는 효율적인 멀티스레드 애플리케이션을 손쉽게 구현할 수 있습니다.