execution_policy_tag_t
execution_policy_tag_t (실행 정책 타입)
병렬 알고리즘의 실행 방식을 나타내는 실행 정책 타입(class)들을 정의하는 페이지예요. <execution> 헤더, C++17부터.
출처: cppreference
본문
네 가지 실행 정책 타입이 있어요.
class sequenced_policy { /* unspecified */ }; // (1)
class parallel_policy { /* unspecified */ }; // (2)
class parallel_unsequenced_policy { /* unspecified */ }; // (3)
class unsequenced_policy { /* unspecified */ }; // (4) C++20
-
sequenced_policy: 병렬 알고리즘 오버로딩을 구분하는 고유 타입으로 쓰이며, 알고리즘 실행이 순차(sequenced) 방식으로만 허용돼요.
-
parallel_policy: 병렬 실행을 허용해요.
-
parallel_unsequenced_policy: 병렬 + 비순차 실행을 허용해요.
-
unsequenced_policy: 순차이지만 비순차 실행을 허용해요.
각 정책 타입은 해당 알고리즘에 대해 "구현이 그 방식을 따른다"는 요구사항을 부여해요. 예를 들어 parallel_policy를 받은 알고리즘은 보통 여러 스레드로 나뉘어 실행될 수 있고, unsequenced_policy는 벡터화가 가능하되 그만큼 호출 함수의 제약(데이터 경쟁 금지 등)이 강해져요.
타입 자체는 오버로드 해석을 위해 고유 타입으로 존재하고, 실제 사용은 std::execution::par 같은 인라인 상수 객체(execution_policy_tag 참고)를 알고리즘 첫 인자로 넘기는 방식이에요.