C++17において,OSによらず容易にマルチタスクを行えるようになった.
従来のfor_eash,algotrith.hの各メソッドに実行ポリシーを指定するだけで行えるようになる.


namespace std::execution {
  class sequenced_policy { unspecified };
  class parallel_policy { unspecified };
  class parallel_unsequenced_policy { unspecified };

  inline constexpr sequenced_policy seq{ unspecified };
  inline constexpr parallel_policy par{ unspecified };
  inline constexpr parallel_unsequenced_policy par_unseq{ unspecified };
}

・seq
Sequential.すなわち逐次実行であり,普通のfor_each文と変わらない.
・par
並列実行を許可する.強制ではなく環境によっては逐次実行される.
・par_unseq
並列化およびベクトル化を許可する.
ベクトル化については以下を参照.
https://ja.wikipedia.org/wiki/%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E5%8C%96

例:
いずれの場合も第一引数に実行ポリシーを指定するだけでよい.

#include <algorithm>
#include <execution>
...

//for_eachの並列実行
std::for_each(std::execution::par,
		enemys.begin(),
		enemys.end(),
		[](auto* enemy)
	{
		enemy->Move();
	});

//algorithmの並列
//all_ofを並列に処理している
const auto rst = std::all_of(std::execution::par,vec.begin(),
 vec.end(), [](const auto x) { return x < 9; });
Categories: C++