为什么并行std :: for_each返回void

bre*_*r00 0 c++ parallel-processing c++17

我正在详细阅读C++ 17.下面是std :: for_each的描述,在本书中:

在for_each的串行版本中,在C++ 17之前可用的版本>您将获得一元函数作为算法的返回值.在并行版本中不可能返回这样的对象,因为调用的顺序>是不确定的.

我仍然明白,为什么并行std :: for_each不能返回仿函数f.虽然调用的顺序是不确定的,但并行for_each块以等待调用完成.当每个并行操作完成时,返回f似乎没问题.

eer*_*ika 6

返回仿函数背后的想法是允许仿函数在连续调用中累积状态.可以通过返回的副本访问累积的状态.

累积需要串行访问累积状态,这将破坏并行执行的目的.实质上,每个执行线程都将获得函数对象的副本,并且不共享它们的状态.

该标准有以下注意事项:

[注意:不返回其Function参数的副本,因为并行化可能不允许有效的状态累积. - 结束说明]