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

时间:2019-02-15 02:38:33

标签: c++ parallel-processing c++17

我正在阅读C++17 in detail。 在本书的下面,有 std :: for_each 的描述:

  

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

我仍然理解,为什么并行 std :: for_each 无法返回函子 f 。尽管调用顺序不确定,但并行 for_each 块等待调用完成。每次并行操作完成后,返回 f 似乎没问题。

1 个答案:

答案 0 :(得分:6)

返回函子的想法是允许函子在连续的调用中累积状态。可以通过返回的副本访问累积状态。

累加需要对累加状态的串行访问,这将破坏并行执行的目的。本质上,每个执行线程都将获得功能对象的副本,并且它们的状态不会共享。

该标准有以下注释:

  

[注意:不返回其Function参数的副本,因为并行化可能不允许高效   状态积累。 —尾注]