Questions pertinentes :
À propos de C++11 :
- C++11 : std::thread pooled ?
- Est-ce que async(launch::async) en C++11 rendra les pools de threads obsolètes pour éviter la création coûteuse de threads ?
A propos de Boost :
Comment puis-je obtenir un pool de fils a envoyer des tâches à sans les créer et les supprimer à chaque fois ? Cela signifie que les threads persistants peuvent se resynchroniser sans se joindre.
J'ai un code qui ressemble à ceci :
namespace {
std::vector<std::thread> workers;
int total = 4;
int arr[4] = {0};
void each_thread_does(int i) {
arr[i] += 2;
}
}
int main(int argc, char *argv[]) {
for (int i = 0; i < 8; ++i) { // for 8 iterations,
for (int j = 0; j < 4; ++j) {
workers.push_back(std::thread(each_thread_does, j));
}
for (std::thread &t: workers) {
if (t.joinable()) {
t.join();
}
}
arr[4] = std::min_element(arr, arr+4);
}
return 0;
}
Au lieu de créer et de joindre des threads à chaque itération, je préférerais envoyer des tâches à mes threads de travail à chaque itération et ne les créer qu'une seule fois.