C# 기초강좌
멀티쓰레드(Thread) 작성법
STA, MTA
탑크리에듀(http://www.topcredu.co.kr), 이종철
실습코드 및 동영상 다시 보기는 아래 URL에서
가능 합니다.
http://ojc.asia
쓰레드(Thread)
 쓰레드는 하나의 프로세스(실행 중인 프로그램) 내에 존재하는 하나또는 여러 개의 순차적
인 제어의 흐름을 관리하기 위해 사용한다.
 멀티 쓰레드가 제대로 동작하기 위해서는 CPU가 여러 개 있어야 한다. 보통은 단일 CPU
를 사용하게되면 CPU는 한번에 하나의 쓰레드를 사용하므로 멀티 쓰레드로 프로그램이
실행되는 경우에 CPU의 사용 시간을 나누어서 각각의 쓰레드에게 주는 되므로 단일 쓰레
드와 별차이가 없다.
 쓰레드가 생성될 때마다 해당 쓰레드를 위한 Stack Frame이 할당되는데 이를 Thread
Stack이라하며 Thread Stack은 메소드 단위로 분리되어 할당된다.
탑크리에듀(www.topcredu.co.kr), 이종철
C# 멀티쓰레드(Multi-Thread)
 C#에서 멀티 쓰레드를 사용하는 방법은 이미 C#에서 만들어놓은 Thread 클래스와
ThreadStart 델리게이트를 이용하면 된다.
 간단히 C#에서 멀티 쓰레드를 위한 클래스가 어떤 것이 있고 그 사용법은 어떻게 되는가
를 이해하면 된다.
//FirstWork는 쓰레드가 실행하게될 메소드 명이다.
Thread thread1 = new Thread(new ThreadStart(t.FirstWork));
thread1.start();
 C#에서 쓰레드를 위한 클래스들은 System.Threading 네임스페이스 안에 정의 되어 있다.
탑크리에듀(www.topcredu.co.kr), 이종철
C# 멀티쓰레드(Multi-Thread)
 C#에서 멀티 쓰레드를 사용하는 방법은 이미 C#에서 만들어놓은 Thread 클래스와
ThreadStart 델리게이트를 이용하면 된다.
 간단히 C#에서 멀티 쓰레드를 위한 클래스가 어떤 것이 있고 그 사용법은 어떻게 되는가
를 이해하면 된다.
//FirstWork는 쓰레드가 실행하게될 메소드 명이다.
Thread thread1 = new Thread(new ThreadStart(t.FirstWork));
thread1.start();
 C#에서 쓰레드를 위한 클래스들은 System.Threading 네임스페이스 안에 정의 되어 있다.
탑크리에듀(www.topcredu.co.kr), 이종철
쓰레드 동작방식(STA vs MTA)
 STA (single-threaded apartment)와 MTA (multi-threaded apartment)는 COM과 관련된
쓰레드 설정이다.
 STA는 단일 쓰레드로 운영되는 것이며 MTA는 멀티 쓰레드로 운영되는 것이다. C#은 기본적
으로 MTA로 운영되는데 Main 메소드에 STAThread 라고 설정하지 않으면 기본적으로
MTAThread 방식으로 운영된다는 것이다. 설정은 아래처럼 두가지 형태로 가능하다.
[MTAThread]
public static void Main() {
Thread.CurrentThread.ApartmentState = ApartmentState.MTA;
……
 STA를 사용하는 경우는 싱글 쓰레드로만 동작되는 COM 객체를 사용하는 경우인데 드래그 드
랍 기능, 클립보드 관련 기능, OpenDialog, SaveFileDialog, 웹브라우저 컨트롤 등을 사용하
는 경우 STAThread로 동작 되어야 한다.
탑크리에듀(www.topcredu.co.kr), 이종철
간단한 멀티 쓰레드 예제 - 1
using System;
using System.Threading;
public class ThreadTest {
public static int sleepingTime;
public void FirstWork() {
for (int i = 0; i < 10; i++) {
//밀리세컨드 단위로 주어진 기간만큼 쉬었다가 다시 실행됨
Thread.Sleep(sleepingTime);
Console.Write("First{0} ", i);
}
}
public void SecondWork()
{
for (int i = 0; i < 10; i++)
{
Thread.Sleep(sleepingTime);
Console.Write("Second{0} ", i);
}
}
탑크리에듀(www.topcredu.co.kr), 이종철
간단한 멀티 쓰레드 예제 - 2
[MTAThread]
public static void Main() {
ThreadTest.sleepingTime = int.Parse(Console.ReadLine());
ThreadTest t = new ThreadTest();
//Thread는 생성자의 인자로 ThreadStart Delegate를 인자로 받는다.
//ThreadStart Delegate의 인자는 쓰레드가 실행 할 메소드명
Thread first = new Thread(new ThreadStart(t.FirstWork));
Thread second = new Thread(new ThreadStart(t.SecondWork));
first.Start(); second.Start();
}
}
[실행결과]
100
First0 Second0 First1
Second1 Second2 First2
First3 Second3 First4
Second4 First5 Second5
……
탑크리에듀(www.topcredu.co.kr), 이종철
This Practice makes the Expert!
C#,ADO.NET,Network
프로그래밍 기초과정 C#기초, Xamarin 앱 개발과정 Xamarin 앱개발 과정 C# WPF, XAML 프로그래밍

(C#,멀티쓰레드강좌)쓰레드, STA, MTA개요, 간단한 멀티쓰레드 예제_닷넷,C#,WPF,자마린실무강좌

  • 1.
    C# 기초강좌 멀티쓰레드(Thread) 작성법 STA,MTA 탑크리에듀(http://www.topcredu.co.kr), 이종철
  • 2.
    실습코드 및 동영상다시 보기는 아래 URL에서 가능 합니다. http://ojc.asia
  • 3.
    쓰레드(Thread)  쓰레드는 하나의프로세스(실행 중인 프로그램) 내에 존재하는 하나또는 여러 개의 순차적 인 제어의 흐름을 관리하기 위해 사용한다.  멀티 쓰레드가 제대로 동작하기 위해서는 CPU가 여러 개 있어야 한다. 보통은 단일 CPU 를 사용하게되면 CPU는 한번에 하나의 쓰레드를 사용하므로 멀티 쓰레드로 프로그램이 실행되는 경우에 CPU의 사용 시간을 나누어서 각각의 쓰레드에게 주는 되므로 단일 쓰레 드와 별차이가 없다.  쓰레드가 생성될 때마다 해당 쓰레드를 위한 Stack Frame이 할당되는데 이를 Thread Stack이라하며 Thread Stack은 메소드 단위로 분리되어 할당된다. 탑크리에듀(www.topcredu.co.kr), 이종철
  • 4.
    C# 멀티쓰레드(Multi-Thread)  C#에서멀티 쓰레드를 사용하는 방법은 이미 C#에서 만들어놓은 Thread 클래스와 ThreadStart 델리게이트를 이용하면 된다.  간단히 C#에서 멀티 쓰레드를 위한 클래스가 어떤 것이 있고 그 사용법은 어떻게 되는가 를 이해하면 된다. //FirstWork는 쓰레드가 실행하게될 메소드 명이다. Thread thread1 = new Thread(new ThreadStart(t.FirstWork)); thread1.start();  C#에서 쓰레드를 위한 클래스들은 System.Threading 네임스페이스 안에 정의 되어 있다. 탑크리에듀(www.topcredu.co.kr), 이종철
  • 5.
    C# 멀티쓰레드(Multi-Thread)  C#에서멀티 쓰레드를 사용하는 방법은 이미 C#에서 만들어놓은 Thread 클래스와 ThreadStart 델리게이트를 이용하면 된다.  간단히 C#에서 멀티 쓰레드를 위한 클래스가 어떤 것이 있고 그 사용법은 어떻게 되는가 를 이해하면 된다. //FirstWork는 쓰레드가 실행하게될 메소드 명이다. Thread thread1 = new Thread(new ThreadStart(t.FirstWork)); thread1.start();  C#에서 쓰레드를 위한 클래스들은 System.Threading 네임스페이스 안에 정의 되어 있다. 탑크리에듀(www.topcredu.co.kr), 이종철
  • 6.
    쓰레드 동작방식(STA vsMTA)  STA (single-threaded apartment)와 MTA (multi-threaded apartment)는 COM과 관련된 쓰레드 설정이다.  STA는 단일 쓰레드로 운영되는 것이며 MTA는 멀티 쓰레드로 운영되는 것이다. C#은 기본적 으로 MTA로 운영되는데 Main 메소드에 STAThread 라고 설정하지 않으면 기본적으로 MTAThread 방식으로 운영된다는 것이다. 설정은 아래처럼 두가지 형태로 가능하다. [MTAThread] public static void Main() { Thread.CurrentThread.ApartmentState = ApartmentState.MTA; ……  STA를 사용하는 경우는 싱글 쓰레드로만 동작되는 COM 객체를 사용하는 경우인데 드래그 드 랍 기능, 클립보드 관련 기능, OpenDialog, SaveFileDialog, 웹브라우저 컨트롤 등을 사용하 는 경우 STAThread로 동작 되어야 한다. 탑크리에듀(www.topcredu.co.kr), 이종철
  • 7.
    간단한 멀티 쓰레드예제 - 1 using System; using System.Threading; public class ThreadTest { public static int sleepingTime; public void FirstWork() { for (int i = 0; i < 10; i++) { //밀리세컨드 단위로 주어진 기간만큼 쉬었다가 다시 실행됨 Thread.Sleep(sleepingTime); Console.Write("First{0} ", i); } } public void SecondWork() { for (int i = 0; i < 10; i++) { Thread.Sleep(sleepingTime); Console.Write("Second{0} ", i); } } 탑크리에듀(www.topcredu.co.kr), 이종철
  • 8.
    간단한 멀티 쓰레드예제 - 2 [MTAThread] public static void Main() { ThreadTest.sleepingTime = int.Parse(Console.ReadLine()); ThreadTest t = new ThreadTest(); //Thread는 생성자의 인자로 ThreadStart Delegate를 인자로 받는다. //ThreadStart Delegate의 인자는 쓰레드가 실행 할 메소드명 Thread first = new Thread(new ThreadStart(t.FirstWork)); Thread second = new Thread(new ThreadStart(t.SecondWork)); first.Start(); second.Start(); } } [실행결과] 100 First0 Second0 First1 Second1 Second2 First2 First3 Second3 First4 Second4 First5 Second5 …… 탑크리에듀(www.topcredu.co.kr), 이종철
  • 9.
    This Practice makesthe Expert! C#,ADO.NET,Network 프로그래밍 기초과정 C#기초, Xamarin 앱 개발과정 Xamarin 앱개발 과정 C# WPF, XAML 프로그래밍