스레드

less than 1 minute read


스레드(thread)

프로그램이 동시에 여러 작업을 진행하는 것처럼 동작하게 만드는 함수이다. 병렬식으로 보이지만 실제로는 특정 코드의 연산이 끝날 때까지 코드의 실행을 멈추지 않고 순차적으로 다음 코드를 실행한다.

#include <iostream>
#include <thread>
#include <Windows.h>

using namespace std;

void function1()
{
	for (int i = 0; i < 10; i++)
	{
		printf("thread 1 call %d\n", i);
		// 흐름을 파악하기 위한 딜레이
		Sleep(1000);
	}
}

void function2()
{
	for (int i = 0; i < 10; i++)
	{
		printf("thread 2 call %d\n", i);
		Sleep(1000);
	}
}

void function3()
{
	while(1)
	{
		printf("thread 3 call\n");
		Sleep(1000);
	}
}

int main()
{
	thread t1(function1);
	thread t2(function2);
	thread t3(function3);

	t1.join();
	t2.join();
	t3.join();
	
	return 0;
}

실행해보면 function 1, 2, 3이 동시에 출력되는게 보인다. 실제로는 동시가 아닌 순차적으로 진행되는 것이고 일반 함수라면 절차지향에 따라서 작성한 순서로 출력되겠지만 불규칙한 순서로 함수가 출력되는걸 볼 수 있다.

스레드는 함수가 종료되기 전에 다음 함수로 넘어가는 방식이라 메인함수에서 스레드 함수를 다 끝내기 전에 return 코드를 읽게되면 프로세스가 종료됐는데도 끝나지 않은 함수가 남게되어 오류가 발생하기도 한다.

join() 함수는 스레드 함수가 종료될 때 까지 프로세스가 종료되지 않도록해준다.