<thread>

Yongs12 ㅣ 2024. 2. 20. 22:06

std::thread

c++11부터 표준 라이브러리에 추가되었으며 여러 개의 작업을 동시에 실행할 때 사용한다.
thread객체를 만들고 함수를 인자로 전달해 새로운 쓰레드에서 작업을 시작하고 종료되면 리소스가 반환된다.

 

Thread 기본 함수

// <windows.h>에 있던 ::CreateThread() 에서
// c++11 도입된 방법 리눅스 window 상관 x
#include <thread>

void HelloThread()
{
    cout << "Hello Thread" << endl;
}

int main()
{
    std::thread thread(HelloThread);

    // 쓰레드 갯수 정보 반환
    thread.hardware_concurrency();
    
    // 쓰레드의 아이디값
    thread.get_id();

    // 주 쓰레드와 독립적으로 실행하게 함 (끝나면 리소스 해제됨)
    // ㄴ 리눅스에서 분리해서 만든 프로그램을 데몬이라고 함
    thread.detach();

    // 쓰레드 id가 0인지 체크함
    thread.joinable();
    
    // main에서 쓰레드가 종료될 때까지 대기해줌
    thread.join();

}

 


 

Joinable()를 이용해서 쓰레드가 작업중인지 체크

std::thread thread(HelloThead);

// 쓰레드 id가 0인지 체크함
if (thread.joinable())
{
    thread.join();
}

 
 
 

여러 쓰레드가 병렬 처리됨

void HelloThread_2(int32 num)
{
    cout << num << endl;
}

int main()
{
    vector<std::thread> v;

	// 쓰레드 생성 및 함수 실행
    for (int32 i = 0; i < 10; ++i)
    {
        v.push_back(std::thread(HelloThread_2, i));
    }
   
    // 쓰레드 작업이 끝날 때 까지 대기
    for (int32 i = 0; i < 10; ++i)
    {
        if (v[i].joinable())
        {
            v[i].join();
        }
    }

    cout << "Hello Main" << endl;
}

실행할 때마다 순서는 달라진다.

 

'C, C++' 카테고리의 다른 글

<mutex>  (0) 2024.02.22
<atomic>  (0) 2024.02.21
weak_ptr  (0) 2023.07.17
shared_ptr  (0) 2023.07.16
unique_ptr  (0) 2023.07.15