[C++11] utilisation de nombreux threads
Bonjour,
Je suis en train de fabriquer un simulateur multi-agent multithreader.
Je lance donc 5000 threads, un pour chaque agent. Il se trouve que le lancement des threads est très lent (350 ms).
Je cherche donc à stocker mes agents dans un vector puis de les lancer plus tard.
voici un code minimal :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| #include <iostream>
#include <thread>
#include <vector>
#include <chrono>
void agent()
{
int cmp = 0;
for (int i=0; i< 100; ++i)
++cmp;
}
int main(int argc, char* argv[])
{
auto start_time=std::chrono::high_resolution_clock::now(), end_time=std::chrono::high_resolution_clock::now();
std::vector<std::thread> vt;
start_time = std::chrono::high_resolution_clock::now();
for (int i=0; i<5000; ++i)
vt.push_back(std::thread(agent));
end_time = std::chrono::high_resolution_clock::now();
std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time).count() << ":";
for (std::vector<std::thread>::iterator it = vt.begin(); it != vt.end(); ++it)
(*it).join();
return EXIT_SUCCESS;
} |
Voici ce que j'aimerais obtenir :
- création des 5000 threads dans un vector (sans les lancer)
- lancer les 5000 threads.
- les relancer quand les 5000 ont finis
- les relancer quand les 5000 ont finis
- les relancer quand les 5000 ont finis
- les relancer quand les 5000 ont finis
- les relancer quand les 5000 ont finis
Je n'arrive pas à trouver une fonction pour relancer les threads.
Merci d'avance pour votre aide :)
Robin