Thread-Pooling in C ++ 11

Relevante Fragen:

Über C ++ 11:

C ++ 11: std :: thread gepoolt?Wird Async (launch :: async) in C ++ 11 Thread-Pools überflüssig machen, um teure Thread-Erstellung zu vermeiden?

Über Boost:

C ++ Boost Thread Wiederverwendung von Threadsboost :: thread und erstellen Sie einen Pool von ihnen!

Wie bekomme ich eine?Pool von Threads zuAufgaben senden an, ohne sie immer wieder zu erstellen und zu löschen? Dies bedeutet, dass persistente Threads ohne Beitritt neu synchronisiert werden müssen.

Ich habe Code, der so aussieht:

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

Anstatt Threads bei jeder Iteration zu erstellen und zu verbinden, würde ich es vorziehen, Aufgaben bei jeder Iteration an meine Arbeitsthreads zu senden und sie nur einmal zu erstellen.

Antworten auf die Frage(9)

Ihre Antwort auf die Frage