std::for_each(std::execution::par_unseq)
时间: 2024-08-26 13:02:44 浏览: 89
C++中的std::async()详解
`std::for_each`是C++标准库中的一个算法,它对给定的范围内的元素执行指定的操作。当配合`std::execution::par_unseq`标志一起使用时,这个操作会并行地(非顺序)分布到线程池中去执行。`std::execution::par_unseq`表示部分依赖并行化(partially sequential parallelism),即任务之间的执行不会严格按照顺序,但在每个任务内部可能会保持有序。
例如:
```cpp
#include <algorithm>
#include <iostream>
#include <vector>
#include <execution>
int square(int x) {
return x * x;
}
void process_parallel(const std::vector<int>& numbers, std::execution::exec policy) {
std::for_each(numbers.begin(), numbers.end(),
std::execution::par_unseq,
square);
}
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
process_parallel(vec, std::execution::par_unseq);
// 打印结果:每个数的平方,可能按非确定的顺序
for (const auto& result : vec) {
std::cout << result << " ";
}
return 0;
}
```
在这个例子中,`square`函数会被应用到`numbers`向量的每一个元素上,而使用`std::execution::par_unseq`时,计算过程会在可用的线程上并发执行。
阅读全文