簡體   English   中英

為什么並行std :: for_each返回void

[英]Why parallel std::for_each return void

我正在詳細閱讀C ++ 17 本書下面對std :: for_each進行了說明:

在for_each的串行版本中,該版本在C ++ 17之前可用,您會從算法中獲得一元函數作為返回值。 在並行版本中,返回這樣的對象是不可能的,因為調用的順序是不確定的。

我仍然明白,為什么並行的std :: for_each無法返回函子f 盡管調用的順序不確定,但並行的for_each塊等待調用完成。當每個並行操作完成時,返回f似乎沒問題。

返回函子的想法是允許函子在連續的調用中累積狀態。 可以通過返回的副本訪問累積狀態。

累加需要對累加狀態的串行訪問,這會破壞並行執行的目的。 本質上,每個執行線程都將獲得功能對象的副本,並且它們的狀態不會共享。

該標准有以下注釋:

[注意:不返回其Function參數的副本,因為並行化可能不允許有效的狀態累積。 —尾注]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM