В стандарт С++ 2011 года были добавлены классы для работы с потоками, мьютексами, переменными для блокировки по условию, атомарные переменные, асинхронные вызовы и способы получения результатов от них. В 2014 были добавлены параллельные и векторные версии алгоритмов. В 2020 были добавлены сопрограммы, семафоры, дополнительные классы для синхронизации и управления потоками.
```
#include <execution>
#include <algorithm>
#include <future>
// подсчитать, сколько значений в массиве a больше x
int count0(int a[], int n, int x)
{ // последовательная версия
return std::count_if(a,a+n,[](int v){ return v>x; });
}
int count1(int a[], int n, int x)
{ // параллельная версия, в MinGW не реализовано
return std::count_if(std::execution::par,a,a+n,[](int v){ return v>x; });
}
int count2(int a[], int n, int x)
{ // разбиение на отрезки с асинхронным вычислением
if (n < 1000000)
return std::count_if(a,a+n,[=](int v){ return v>x; });
auto res = std::async(count2, a+n/2,n-n/2,x);
return count2(a,n/2,x) + res.get();
}
```