std::this_thread::get_id în C++

Returnează identificatorul firului de execuție curent (std::thread::id).

Sintaxă
#include <thread>
std::thread::id get_id() noexcept;

Ce face std::this_thread::get_id

Fiecare fir are un identificator unic de tip std::thread::id. std::this_thread::get_id() îl returnează pe cel al firului curent, iar t.get_id() pe cel al unui obiect std::thread.

Identificatorii se pot compara și afișa (cu std::cout sau, din C++23, cu std::println). Valorile concrete diferă la fiecare rulare, așa că sunt utile doar pentru jurnale și pentru a verifica „rulez pe firul principal?”.

Ce returnează

Un std::thread::id.

Exemple

Exemplul 1: Id-ul firului principal și al unui fir nou

Numerele diferă la fiecare rulare și de la un sistem la altul.

#include <print>
#include <thread>

int main() {
    std::println("main: {}", std::this_thread::get_id());

    std::thread::id idFir;
    std::thread t([&idFir] { idFir = std::this_thread::get_id(); });
    t.join();
    std::println("fir:  {}", idFir);
}

Rezultat posibil (diferă la fiecare rulare)

main: 0x1f6a1e0c0
fir:  0x16b3a3000

Exemplul 2: Compararea id-urilor

Comparația dă mereu același rezultat, chiar dacă valorile se schimbă.

#include <print>
#include <thread>

int main() {
    const auto principal = std::this_thread::get_id();
    bool peAltFir = false;

    std::thread t([&] { peAltFir = std::this_thread::get_id() != principal; });
    t.join();

    std::println("firul nou are alt id: {}", peAltFir);
    std::println("main are același id: {}", std::this_thread::get_id() == principal);
}

Rezultat

firul nou are alt id: true
main are același id: true

Greșeli frecvente

  • Folosești id-ul ca număr de ordine (firul 1, 2, 3). Id-urile nu sunt consecutive; dacă ai nevoie de un număr, dă-l tu firului ca argument.

Comenzi înrudite

  • std::thread: Pornește o funcție pe un fir de execuție separat, care rulează în paralel cu restul programului.
  • std::thread::hardware_concurrency: Returnează câte fire pot rula cu adevărat în paralel pe acest calculator (de obicei numărul de nuclee logice).