Advertisement
homer512

async fork join

Nov 17th, 2014
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.18 KB | None | 0 0
  1. #include <future>
  2. // using std::future, std::async, std::launch
  3. #include <algorithm>
  4. // using std::transform, std::for_each
  5. #include <iterator>
  6. // using std::back_inserter
  7. #include <functional>
  8. // using std::mem_fn
  9. #include <vector>
  10. // using std::vector
  11. #include <string>
  12. // using std::string
  13.  
  14. #include <iostream>
  15. // using std::cout, std::endl
  16.  
  17.  
  18. namespace {
  19.   std::string operation(const std::string& input)
  20.   {
  21.     return input + " bar";
  22.   }
  23. }
  24. int main()
  25. {
  26.   std::vector<std::string> inputs(10, std::string("foo"));
  27.  
  28.   // fork
  29.   std::vector<std::future<std::string> > futures;
  30.   auto start_async = [](const std::string& input) {
  31.     return std::async(std::launch::async, operation, input);
  32.   };
  33.   std::transform(inputs.cbegin(), inputs.cend(), std::back_inserter(futures),
  34.          start_async);
  35.  
  36.   // join
  37.   std::vector<std::string> results;
  38.   std::transform(futures.begin(), futures.end(), std::back_inserter(results),
  39.          std::mem_fn(&std::future<std::string>::get));
  40.  
  41.   // demo output
  42.   auto print_result = [](const std::string& output) {
  43.     std::cout << output << std::endl;
  44.   };
  45.   std::for_each(results.cbegin(), results.cend(), print_result);
  46.   return 0;
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement