阻塞多个线程执行完成,主要使用 std::future 、std::promise

使用的下面场景,在 future 等待的阶段会使用for 循环等待搜索的future都执行完毕(std::promise 设置value)。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std::chrono_literals; // for sleep_for(10s)
using namespace std;
void Func(std::shared_ptr> finished) {
  std::this_thread::sleep_for(10s);
  finished->set_value();
}
int main() {
  vector> finished_futures;
  vector>> finished_promises;
  int size = 10;
  std::vector threads;
  for (int i =0 ; i< size; ++i) {
    auto finished_promise = std::make_shared>();
    finished_promises.emplace_back(finished_promise);
    finished_futures.emplace_back(finished_promise->get_future());
    threads.emplace_back(std::move(std::thread(Func, finished_promise))) ;
  }

  for (int i=0; i< size; i++) {
    std::cout << "wait:" << i << "..." << std::endl;
    finished_futures[i].wait();
    std::cout << "wait:" << i << " end" << std::endl;
  }
  for (auto& p : threads) {
    p.join();
  }
  return 0;
}

你可能感兴趣的:(c-c++)