[C++]멀티스레드

강병우·2023년 7월 10일
0

멀티스레드

목록 보기
1/3

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() : 해당 스레드가 실제 스레드에서 분리된다. -> 백그라운드 체제로 변경된다.

참조 : [C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

0개의 댓글

관련 채용 정보