Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 스레드 get_id() 함수 완벽 가이드

이 튜토리얼에서는 C++에서 스레드의 get_id() 함수를 사용하는 방법에 대해 자세히 알아보겠습니다.

get_id() 함수란?

C++의 std::thread 클래스가 제공하는 get_id() 함수는 현재 실행 중인 스레드의 고유 식별자(ID)를 반환합니다. 이 함수는 먼저 프로세스의 현재 상태를 확인한 후, 해당 스레드에 할당된 ID를 thread::id 타입으로 돌려줍니다.

주요 특징은 다음과 같습니다.

  • 매개변수 없음: 이 함수는 어떠한 인자도 받지 않습니다.
  • 반환값: 호출한 스레드의 고유 ID를 std::thread::id 타입으로 반환합니다.
  • 실행 중인 스레드 전용: 아직 시작되지 않았거나 이미 종료된(join된) 스레드에 대해 호출하면 기본 생성된 ID(유효하지 않은 ID)를 반환할 수 있습니다.

예제 코드

두 개의 스레드를 생성하고 각각의 ID를 출력하는 예제를 살펴보겠습니다.

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

// 1초간 대기하는 스레드 함수
void sleepThread() {
    this_thread::sleep_for(chrono::seconds(1));
}

int main() {
    // 두 개의 스레드 생성
    thread thread1(sleepThread);
    thread thread2(sleepThread);

    // 각 스레드의 ID 가져오기
    thread::id t1_id = thread1.get_id();
    thread::id t2_id = thread2.get_id();

    // 스레드 ID 출력
    cout << "ID associated with thread1= " << t1_id << endl;
    cout << "ID associated with thread2= " << t2_id << endl;

    // 스레드 종료 대기
    thread1.join();
    thread2.join();

    return 0;
}

실행 결과

ID associated with thread1= 135456142132844
ID associated with thread2= 135121414221716

코드 설명

위 예제의 동작 흐름을 단계별로 살펴보면 다음과 같습니다.

  1. sleepThread() 함수는 this_thread::sleep_for()를 사용해 1초 동안 대기합니다.
  2. main() 함수에서 두 개의 스레드(thread1, thread2)를 생성하고 즉시 실행합니다.
  3. get_id()를 호출하여 각 스레드의 고유 ID를 변수에 저장합니다.
  4. 저장된 ID를 콘솔에 출력합니다.
  5. join()을 호출하여 두 스레드가 모두 작업을 마칠 때까지 메인 스레드가 대기합니다.

참고 사항

출력되는 스레드 ID 값은 시스템과 실행 환경에 따라 매번 달라집니다. 스레드 ID는 운영체제가 스레드를 구분하기 위해 부여하는 고유한 값이므로, 프로그램을 실행할 때마다 다른 숫자가 출력되는 것이 정상입니다.

또한 스레드 ID는 디버깅 시 특정 스레드를 추적하거나, 여러 스레드를 비교·관리해야 하는 상황에서 유용하게 활용됩니다.