본문 바로가기
Study/C++

[C++]멀티스레드(Multi Thread)

by DawIT 2020. 12. 18.
320x100

스레드에 대해 알아보기 전에 먼저 더 큰 단위인 프로세스(Process)는 일반적으로 실행중인 프로그램을 가리킨다.

 

저장장치에 저장되어있는 프로그램이 메모리 공간으로 이동하여 OS의 제어를 받는 상태이다.

프로그램과 차이점이 있다면, 프로세스는 메모리에 자신만의 공간을 갖는 능동적인 개체라는 것이다.

 

스레드(Thread)는 프로세스에서 실행 제어만 분리한 단위 이다.

 

프로세서를 사용하는 기본 단위이며, 명령어를 독립적으로 실행할 수 있는 하나의 제어 흐름이다.

 

프로세스는 스레드를 최소 하나 이상 가진다.

 

멀티 스레드(Multi Thread) 란, 단일 프로세스에서 여러 개의 스레드를 이용하여 작업하는 것이다.

 

이에 대해 조금 더 자세히 알고 싶다면 내 블로그의 이  글을 참고하면 좋다.

 

단일 스레드와 다중 스레드

 

기본적인 스레드의 사용법에 대해 알아본다.

 

스레드를 사용하기 위해서는 헤더 <thread>를 include 해줘야 한다.

 

Join

#include <iostream>
#include <thread>
using namespace std;

void thread1()
{
	for(int i = 0; i<10; i++)
	cout << "Thread 1" << endl;
}

void thread2()
{
	for (int i = 0; i < 10; i++)
	cout << "Thread 2" << endl;
}

void thread3()
{
	for (int i = 0; i < 10; i++)
	cout << "Thread 3" << endl;
}

int main()
{
	thread t1(thread1);
	thread t2(thread2);
	thread t3(thread3);

	t1.join();
	t2.join();
	t3.join();

	cout << "메인함수 종료" << endl;
}

 

스레드를 테스트하기 위해 각각 3개의 함수와, 스레드를 만들어준다.

 

스레드를 만들기 위해서는 thread 스레드명(함수명) 을 사용하면 된다.

 

그리고 join 함수는 해당 스레드가 종료될 시 리턴하는 함수이다.

 

실행결과

 

join은 해당 스레드가 종료될 때 까지 리턴하지 않지만, detach는 스레드를 실행시키고 백그라운드에서 동작하게 만든다.

 

Detach

 

#include <iostream>
#include <thread>
using namespace std;

void thread1()
{
	for(int i = 0; i<10; i++)
	cout << "Thread 1" << endl;
}

void thread2()
{
	for (int i = 0; i < 10; i++)
	cout << "Thread 2" << endl;
}

void thread3()
{
	for (int i = 0; i < 10; i++)
	cout << "Thread 3" << endl;
}

int main()
{
	thread t1(thread1);
	thread t2(thread2);
	thread t3(thread3);

	t1.detach();
	t2.detach();
	t3.detach();

	cout << "메인함수 종료" << endl;
}

 

실행결과

 

실행해보면, 메인함수 종료만 출력되거나, Thread 1 등등이 조금씩 섞여서 출력될 때도 있다. 이는 detach가 바로바로 스레드를 실행시키고 넘어가기 때문에, 채 10번의 Thread 1 을 출력하기도 전에 메인함수가 종료되어 다른 스레드들도 같이 종료된 것이다.

댓글