C#을 이용하여 스레드를 생성해보자.

 


기본 쓰레드 생성

using System;

namespace Server {

	class Program {
    
            	static void newFunction() {
                	Console.WriteLine("Thread Running...");
        	}
    
        	static void Main(string[] args) {
                	Thread t1 = new Thread(newFunction);
                	t1.Start();
        	}
        
    	}
    
}

 

 쓰레드로 돌릴 함수를 하나 선언해주고, Main에서 쓰레드를 통해 함수를 실행시키는 코드이다. 결과로 Thread Running...이 출력되고 프로그램이 종료된다.

 


IsBackground와 Join

using System;

namespace Server {

	class Program {
    
            	static void newFunction() {
                	Console.WriteLine("Thread Running...");
        	}
    
        	static void Main(string[] args) {
                	Thread t1 = new Thread(newFunction);
                	t1.Start();
                    
                        t1.IsBackground = true;
                    
                        t1.Join();
        	}
        
    	}
    
}

 

 쓰레드에는 IsBackground 속성이 존재한다. 이 속성의 기본 값은 false이며, true로 설정 시 백그라운드에서 돌아가게 된다. 백그라운드에서 돌아가게 된다면, 메인 스레드 종료 시 해당 스레드도 종료된다. 그러나, 전면부에서 실행이 된다면, 메인 스레드가 종료되어도 계속 돌아간다. 메인 스레드의 백그라운드로 종속되는 느낌? 이라고 생각했다.

 

 다음 Join 함수이다. 실행한 스레드의 함수가 종료될 때까지 대기하는 함수이다. 해당 스레드의 작업이 종료된 후 메인 함수의 작업이 이어서 실행된다.

 


ThreadPool

using System;

namespace Server {

	class Program {
    
            	static void newFunction(object state) {
                	Console.WriteLine("Thread Running...");
        	}
    
        	static void Main(string[] args) {
            		ThreadPool.SetMinThreads(1,1);
                        ThreadPool.SetMaxThreads(3,3);
                	ThreadPool.QueueUserWorkItem(newFunction);
        	}
        
    	}
    
}

 

 C#에서 지원하는 스레드 풀이다. 자동으로 생성된 스레드를 이용하여 작업을 실행한다. 위 코드에서는 최소 사용 스레드와 최대 사용 스레드를 설정하였다. 스레드 풀의 최대 갯수보다 많은 스레드가 생성되려고 하면, 실행 중인 스레드가 종료될 때까지 대기한 후 실행된다. ThreadPool은 실행하려는 함수의 매개변수에는 object 타입의 객체가 꼭 있어야 한다.

'OS' 카테고리의 다른 글

OS - 메모리 배리어 - Memory Barrier  (0) 2024.07.11
OS - 캐시(Cache)  (0) 2024.07.09
OS - 컴파일러 최적화  (0) 2024.07.09
OS - 스레드 생성(Task) - C#  (0) 2024.07.08
OS - 멀티스레드 개요  (1) 2024.07.05

+ Recent posts