Пул потоков в C ++ 11

Актуальные вопросы:

О С ++ 11:

C ++ 11: std :: thread объединяется?Сможет ли async (launch :: async) в C ++ 11 сделать пулы потоков устаревшими во избежание дорогостоящего создания потоков?

О Boost:

C ++ Boost Thread, повторное использование потоковboost :: thread и создание пула из них!

Как мне получитьпул потоков вотправлять задачибез создания и удаления их снова и снова? Это означает, что постоянные потоки будут повторно синхронизироваться без присоединения.

У меня есть код, который выглядит так:

namespace {
  std::vector 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;
}

Вместо того, чтобы создавать и объединять потоки на каждой итерации, яЯ предпочитаю посылать задачи моим рабочим потокам каждую итерацию и создавать их только один раз.

Ответы на вопрос(9)

Ваш ответ на вопрос