Table of Contents

<execution>

<execution> provides execution policies for parallel algorithms introduced in C++17: std::execution::seq (sequential), std::execution::par (parallel), std::execution::par_unseq (parallel, unsequenced), std::execution::unseq (unsequenced, C++20).

These policies are passed to algorithms like std::sort, std::for_each, and std::transform to request parallelization. The standard library or compiler runtime chooses how many threads to use.

Example

This example sorts a vector using the std::execution::par policy to enable parallel sorting across multiple threads.

// compile: g++ -std=c++17 -pthread -O3 -o executionexample executionexample.cpp
// run: ./executionexample
// description: parallel sort using execution policy
 
#include <execution>
#include <algorithm>
#include <vector>
#include <iostream>
#include <random>
 
int main() {
    std::vector<int> v(1000);
    std::iota(v.begin(), v.end(), 0);
    std::shuffle(v.begin(), v.end(), std::mt19937{});
 
    std::sort(std::execution::par, v.begin(), v.end());
 
    std::cout << "first 5: ";
    for (int i = 0; i < 5; ++i) std::cout << v[i] << " ";
    std::cout << "\n";
 
    return 0;
}