2023-06-28에 작성된 소스코드입니다.
하나의 프로세스에서 두 개 이상의 스레드가 동시에 작업을 처리한다. 지금까지 main()를 통해 싱글스레드 체제에서 프로그램이 실행했지만 여러 스레드를 굴려 많은 작업량을 동시에 처리할 수 있다.
#include "pch.h"
#include <iostream>
#include "CorePch.h"
#include <thread>
void HelloThread()
{
cout << "Hello World" << endl;
}
void HelloThread2(int32 num)
{
cout << num << endl;
}
int main()
{
// Thread 기본
/*
thread t;
auto id1 = t.get_id(); // 쓰레드 아이디
t = thread(HelloThread);
int32 count = t.hardware_concurrency(); // CPU 코어 개수
auto id2 = t.get_id(); // 쓰레드 아이디
if(t.joinable()) // join 가능한지?
t.join(); // 메인스레드가 먼저 끝날수도 있음. 따라서, join으로 해당 스레드가 끝날 때까지 기다려줘야함.
// t.detach(); // thread객체에서 실제 쓰레드를 분리(=>백그라운드 전환). 이후에 자원 참조를 못함..
cout << "Hello Main" << endl;
*/
vector<thread> v;
for (int32 i = 0; i < 10; i++)
{
v.push_back(thread(HelloThread2, i));
}
for (int32 i = 0; i < 10; i++)
{
if (v[i].joinable())
v[i].join();
}
cout << "Hello Main" << endl;
}
#include <thread>
: 스레드 헤더파일t.hardware_concurrency()
: CPU 코어 개수. 코어 개수에 따라 스레드 작업 개수를 결정할 때 유용하게 사용된다.t = thread(HelloThread)
: 스레드 선언. HelloThread
라는 함수가 다른 스레드에서 실행된다.t.join()
: 해당 스레드가 끝날 때까지 대기한다.t.detach()
: 해당 스레드가 실제 스레드에서 분리된다. -> 백그라운드 체제로 변경된다.