homer512 icon

async fork join

homer512 | PRO | 11/17/14 05:00:53 PM UTC | 0 ⭐ | 625 👁️ | Never ⏰ | []
C++ |

1.18 KB

|

None

|

0 👍

/

0 👎

#include <future>
// using std::future, std::async, std::launch
#include <algorithm>
// using std::transform, std::for_each
#include <iterator>
// using std::back_inserter
#include <functional>
// using std::mem_fn
#include <vector>
// using std::vector
#include <string>
// using std::string
 
#include <iostream>
// using std::cout, std::endl
 
 
namespace {
  std::string operation(const std::string& input)
  {
    return input + " bar";
  }
}
int main()
{
  std::vector<std::string> inputs(10, std::string("foo"));
 
  // fork
  std::vector<std::future<std::string> > futures;
  auto start_async = [](const std::string& input) {
    return std::async(std::launch::async, operation, input);
  };
  std::transform(inputs.cbegin(), inputs.cend(), std::back_inserter(futures),
         start_async);
 
  // join
  std::vector<std::string> results;
  std::transform(futures.begin(), futures.end(), std::back_inserter(results),
         std::mem_fn(&std::future<std::string>::get));
 
  // demo output
  auto print_result = [](const std::string& output) {
    std::cout << output << std::endl;
  };
  std::for_each(results.cbegin(), results.cend(), print_result);
  return 0;
}

Comments