어떻게 C++에서 스레드 id를 얻습니까?

어떻게 C++에서 스레드 id를 얻습니까?

2022-06-04 last update

5 minutes reading C++
스레드의 스레드 id를 어떻게 가져오는지 알기 전에 C++에서 스레드 id의 두 가지 형식을 알아야 합니다.이것은 스레드가 실행되지 않았을 때 얻은 id와 스레드가 실행되었을 때 얻은 id와 같습니다.실행은 실행을 의미합니다.ID(표시 식별자)는 무언가를 식별하는 데 사용됩니다.C++에서 스레드 ID의 이름은 ID, 소문자입니다.
C++의 라인에 대해 id는 데이터 구성원과 구성원 함수를 가진 대상이다.이 id 대상에는 텍스트 코드가 있습니다. 이것은 사람들이 일반적으로 생각하는 id입니다. id 대상은 <연산자를 사용하여 텍스트 코드를cout 대상 (터미널) 으로 보냅니다.id 대상과 텍스트 코드는 루틴이 실행되지 않았을 때와 실행되었을 때와 다르다.
루틴은 id 대상이 데이터 구성원인 클래스입니다.다음 구문을 사용하여 id 객체를 가져올 수 있습니다.
thread::get_id()
문법 "thread::get\uid ()"는 스레드가 실행되지 않을 때 사용할 수도 있고, 스레드가 실행될 때 사용할 수도 있으며, 두 가지 서로 다른 상황에 서로 다른 대상과 상응하는 텍스트 코드를 제공할 수 있습니다.
온라인 루틴이 실행될 때 루틴 id를 얻는 방법 중 하나는 다음과 같은 문법을 사용하는 것이다.
this_thread::get_id()
실행 중인 모든 라인은 서로 다른 id 대상과 상응하는 텍스트 코드를 가지고 있습니다.실행되지 않은 모든 루틴은 같은 프로그램에 대응하는 텍스트 코드를 가지고 있습니다.비록 그것들은 같은 텍스트 코드를 가지고 있지만, 모든 실행되지 않은 라인은 서로 다른 id 대상을 가지고 있다. 왜냐하면 대상은 인용이지 바늘이 아니기 때문이다.
실행 중인 라인을 실행 라인이라고 합니다.
g++ 컴파일러를 사용하여 루틴 프로그램을 컴파일하려면 다음과 같은 명령을 사용합니다.
g++ -std=c++2a temp.cpp -lpthread -o temp
본고는 C++에서 서로 다른 스레드 id를 얻는 방법에 대해 소개하고 먼저 스레드가 무엇인지 간략하게 소개한다.

문장 내용





  • 스레드 요약


    라인은 최고급 함수의 케이스다.스레드는thread류에서 실례화된 것이다.최고급 함수의 이름은 루틴 대상의 구조 함수의 매개 변수이다.C++의 main () 함수도 최상위 함수입니다.따라서main () 함수의 동작은 주 루틴과 유사합니다.다음 프로그램은 main () 함수 중 하나인 두 개의 스레드를 표시합니다.
    #include 
    
    #include 
    
    using namespace std;
    
    
    thread thr;
    
    
    void fun() {
    
    cout <
    출력:
    This is line A.
    
    This is line B.
    최고급 함수는fun()과main()이다.main () 은 주 스레드와 유사합니다.최고급 함수의 이름fun () 은 주 함수 중 스레드thr의 구조 함수의 매개 변수입니다.
    이 프로그램은 iostream 라이브러리를 포함하는 것부터 시작합니다.다음은 라인 라이브러리를 포함합니다.다음 문장은 별도의 설명이 없는 한 프로그램에서 사용하는 모든 이름이 표준 이름 공간임을 확보합니다.
    다음은 함수를 호출하지 않은 상태에서 스레드thr를 설명합니다.그리고 최고급 함수 fun () 을 정의합니다.다음은main () 함수의 정의입니다.main () 의 첫 번째 문장은 함수fun () 을 스레드thr에 분배하고 이 함수를 호출합니다.
    main () 의 두 번째 문장은join 문장입니다.만약 이 문장이 없다면, 주 스레드는 스레드가 없는 상황에서 완성될 때까지,thr는 자신의 완성될 때까지 운행할 수 있습니다.이 문장을 사용하면 입력 문장의 점에서 주 스레드 (함수) 가 멈추고 (블록) 연결된 스레드 (thr) 가 완성될 때까지 실행할 수 있습니다.메인 라인이 계속 완성되기 전에join 문장이 없는 상황에서 프로그램을 컴파일하려고 하면 오류가 발생하고 컴파일하지 않습니다.
    문장을 사용하여 라인을 설명할 때,
    thread thr;
    그것은 운행 라인이 아니다.실행 중인 함수가 없습니다.단, 스레드thr가 함수 이름을 매개 변수로 지정할 때, 에서 보듯이
    thr = thread(fun);
    그것은 실행 중인 라인이 될 것이다.이 문장도 함수 fun () 의 함수를 호출합니다.
    main 함수의join 문장 이후, 스레드thr는 실행 중이며, 더 이상 실행 중인 스레드가 아닙니다.이 상태에서 id는 실행할 때와 다르다.

    스레드 id 가져오기


    다음 프로그램은 루틴이 실행되지 않고 실행 중일 때 루틴 id를 가져오는 기본 방법을 보여 줍니다.
    #include 
    
    #include 
    
    using namespace std;
    
    
    thread thr;
    
    
    void fun() {
    
    cout <
    작성자 컴퓨터의 출력은 다음과 같습니다.
    thread::id of a non-executing thread
    
    
    This is line A.
    
    140362842543872
    
    This is line B.
    thr는 전역 변수입니다.thr 스레드의 함수체에서 사용됩니다. 문장에서:
    thread::id idR = thr.get_id();
    가져온 스레드 객체를 저장하는 변수는 idR입니다.id는 실례화된 대상이지만,thread류의 구성원이기도 합니다.따라서 idR의 성명은 다음과 같아야 합니다.
    thread::id idR
    분호를 달다.다음 문장은 다음과 같습니다.
    cout <
    연산자 << id의 텍스트 버전을 가져와cout (터미널) 에 삽입합니다.주의: 이 경우 id는 스레드가 실행될 때 얻을 수 있습니다.루틴이 실행되지 않았을 때 id를 가져오는 문장은
    thread::id idD = thr.get_id();
    main () 함수에서이것은 스레드 실행 함수와 같고, 수신 변수 idD만 다르다.이 문장이 온라인 프로세스에 실행되기 전에thr는 함수를 분배합니다.실행되지 않은 이 스레드의 텍스트 id (코드):
    thread::id of a non-executing thread
    main () 함수가 실행되는 동안, 스레드thr는join 문장 다음에 자신의 실행을 완성합니다.따라서 "thr.get\u id ()"는 루틴이 실행되지 않았을 때 루틴의 id를 되돌릴 수 있어야 합니다.지금까지 g++로 컴파일된 C++ 프로그램은 완성된 라인까지 실행되는 id를 얻기 어려웠다.이것이 바로 위 코드에서join문장 이후의 id문장이 주석된 이유입니다.

    이 스레드 사용::get\u id()


    "this\uthread::"실행 루틴 (함수) 에서 인코딩합니다.이것은 현재 실행 중인 라인을 표시합니다.그 뒤에는 get\u id () 와 같은 스레드의 함수일 수 있습니다.
    this_thread::get_id()
    라인의 운행 라인 id를 가져옵니다. 이 id는 라인이 실행되지 않았을 때의 id와 다릅니다.
    "this\uthread::"은 스레드의 함수체에서 사용됩니다.다음 프로그램은 스레드 thr에 대해 설명합니다.
    #include 
    
    #include 
    
    using namespace std;
    
    
    thread thr;
    
    
    void fun() {
    
    cout <
    작성자 컴퓨터의 출력은 다음과 같습니다.
    thread::id of a non-executing thread
    
    
    This is line A.
    
    140199206078208
    
    This is line B.
    이 예에서 스레드 이름thr는 스레드 함수체에서 사용되지 않습니다.

    결론


    C++에는 두 가지 형식의 스레드 ID가 있습니다.스레드가 실행될 때의 ID는 스레드가 실행되지 않을 때의 ID와 다릅니다.ID(표시 식별자)는 무언가를 식별하는 데 사용됩니다.C++에서 스레드 ID의 이름은 ID, 소문자입니다.이것은thread 클래스의 데이터 구성원입니다.이것은 기본적인 목표가 아니다.이것은 자신의 이름 공간 클래스인thread::id에서 실례화된 것입니다. id는 대상이지만 해당하는 텍스트 형식이 있습니다.C++ 삽입 작업자 << 텍스트 폼을cout 대상 (터미널) 에 삽입할 수 있습니다.
    각 스레드에는 두 개의 다른 ID가 있습니다. 하나는 스레드가 실행될 때의 ID입니다.또 하나는 라인이 실행되지 않았을 때이다.루틴이 실행되지 않을 때, id의 텍스트 형식은 루틴이 같은 루틴으로 실행될 때의 텍스트 형식과 다르다.
    C++ 규범에는 여러 가지 루틴 id를 가져오는 방법이 있습니다. 그러나 지금까지 g++ 컴파일러를 사용하여 id를 가져오는 유일한 방법은 표현식을 통해 "threadObject.get\uid()"와 "this\uthread::get\uid()"입니다."this\uthread::get\uid()"는 라인을 실행하는 함수체에서 사용됩니다. 여기서 "this\uthread::"는 현재 실행 중인 라인을 가리킵니다.실행 중인 라인을 실행 라인이라고 합니다.