Thread pooling em C ++ 11

Questões Relevantes:

Sobre o C ++ 11:

C ++ 11: std :: thread agrupado?O assíncrono (launch :: async) em C ++ 11 torna os pools de threads obsoletos para evitar a criação de threads caras?

Sobre o Boost:

C ++ impulsionam threads de reutilização de threadsboost :: thread e criando um pool deles!

Como obtenho umpiscina de fios paraenviar tarefas para, sem criar e excluí-los uma e outra vez? Isso significa encadeamentos persistentes para ressincronizar sem ingressar.

Eu tenho código que se parece com isso:

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

Em vez de criar e unir threads a cada iteração, prefiro enviar tarefas para meus threads de trabalho a cada iteração e criá-las apenas uma vez.

questionAnswers(9)

yourAnswerToTheQuestion