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).