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 :
Voici ce que j'aimerais obtenir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
- 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
Partager