Ce face std::thread::hardware_concurrency
std::thread::hardware_concurrency() returnează o estimare a numărului de fire care pot rula simultan, de obicei numărul de nuclee logice ale procesorului. Este un bun punct de pornire pentru câte fire de lucru să creezi.
Poate returna 0 dacă informația nu este disponibilă, așa că tratează acest caz. Valoarea depinde de calculator, deci rezultatele de mai jos sunt doar un exemplu.
Ce returnează
Un unsigned int: numărul de fire hardware, sau 0 dacă nu se știe.
Exemple
Exemplul 1: Câte fire să pornesc?
#include <algorithm>
#include <print>
#include <thread>
int main() {
unsigned n = std::thread::hardware_concurrency();
std::println("Nuclee logice: {}", n);
unsigned fire = std::max(1u, n); // 0 înseamnă „necunoscut”
std::println("Voi folosi {} fire de lucru", fire);
}
Rezultat posibil (diferă la fiecare rulare)
Nuclee logice: 10
Voi folosi 10 fire de lucru
Greșeli frecvente
- Împarți lucrul la
hardware_concurrency()fără să verifici 0. Obții împărțire la zero. - Pornești mult mai multe fire decât nuclee pentru calcule intense. Nu merge mai repede, ci mai încet, din cauza comutării între fire.
Comenzi înrudite
std::thread: Pornește o funcție pe un fir de execuție separat, care rulează în paralel cu restul programului.std::async: Rulează o funcție (de obicei pe alt fir) și îți dă un std::future din care iei rezultatul mai târziu.std::this_thread::get_id: Returnează identificatorul firului de execuție curent (std::thread::id).