2.1.2 parallel_for_each
下面是一个C++(www.cppentry.com)Standard Template Library(STL)版的for_each串行循环示例。
- vector<size_t> inputs = ...
- int workload = ...
-
- for_each(inputs.cbegin(), inputs.cend(),
- [workLoad](size_t i)
- {
- DoWork(i, workLoad);
- });
同样,为了发挥出多核的性能优势,我们用parallel_for_each函数来替代for_each关键字注3。
parallel_for_each会在循环体内处理容器中的每一个元素。
- vector<size_t> inputs = ...
- int workload = ...
-
- parallel_for_each(inputs.cbegin(), inputs.cend(),
- [workLoad](size_t i)
- {
- DoWork(i, workLoad);
- });
在语法上,parallel_for_each函数与std::for_each基本相同。第一个参数是一个迭代器(iterator),指向操作区间内的第一个元素;第二个参数迭代器则指向该区间内最后一个元素的后一个位置;第三个参数则是一个作用于该区间内每一个元素的函数对象。
不要忘记,由于各迭代操作之间必须保持彼此独立,因此,每一个循环体只能更新那些传递给它的字段实体。
由于parallel_for_each方法的执行顺序是不确定的(这与for_each串行循环不同),因此这里的输入参数并非总能按照既定的顺序来处理。