execution_policy_tag
execution_policy_tag (실행 정책 태그)
병렬 알고리즘에 전달하는 실행 정책 객체(태그)들을 모아둔 페이지예요. <execution> 헤더, C++17부터.
출처: cppreference
본문
표준은 네 가지 실행 정책 타입의 인라인 상수 객체를 제공해요.
inline constexpr
std::execution::sequenced_policy seq { /* unspecified */ }; // (since C++17)
inline constexpr
std::execution::parallel_policy par { /* unspecified */ }; // (since C++17)
inline constexpr
std::execution::parallel_unsequenced_policy par_unseq { /* unspecified */ }; // (since C++17)
inline constexpr
std::execution::unsequenced_policy unseq { /* unspecified */ }; // (since C++20)
seq: 순차 실행. 스레드 간 벡터화 허용 없음.par: 병렬 실행을 허용해요(여러 스레드).par_unseq: 병렬 + 비순차(벡터화) 실행을 허용해요.unseq: 순차이지만 비순차(벡터화) 실행을 허용해요(C++20).
이 태그들을 병렬 알고리즘의 첫 인자로 넘기면 실행 방식을 선택할 수 있어요.
std::sort(std::execution::par, v.begin(), v.end()); // 병렬 정렬
주의할 점은 병렬 실행을 쓰면 요소 접근이 동시에 일어나므로, 접근하는 함수가 데이터 경쟁이 없어야 해요. 실행 정책은 오버로드 해석을 구분하는 고유 타입으로도 쓰여요.