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 : 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;
}
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