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

Why parallel std::for_each return void

本文关键字:each 返回 void for std 为什么      更新时间:2023-10-16

我正在详细阅读C 17。在本书中,有一个 std :: for_each 的描述:

在for_each的串行版本中,该版本可在C 17之前可用从算法起作用的返回值。在并行版本中不可能返回这样的对象,因为Incocations的顺序不确定。

我仍然明白,为什么并行 std :: for_each 无法返回函数 f 。尽管调用顺序是不确定的,但并行 for_each 块等待调用完成。当每个并行操作完成时,似乎还可以返回 f 。>

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

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

标准有以下注释:

[注意:不返回其函数参数的副本,因为并行化可能不允许有效 国家积累。 - 终注]