2016-10-02 59 views
6

執行的搜索算法的並行版本的STL(如性病::查找,的std :: find_if)保證迭代器返回的第一個元素匹配標準的範圍內?擔保對STL並行搜索算法

該文檔沒有明確提及是否屬於這種情況 - 並且在'C++ Concurrency in Action'中有一個具體實現而不是返回第一個元素。

+1

這他們沒有,他們將無法正常工作,非parallell同行,因此是非常不值錢。 –

+2

你的意思是C++標準庫嗎?如果是這樣,那麼(目前,C++ 14)在並行和串行算法之間沒有形式上的區別。這些算法的行爲已經詳細說明,而且任何背離都會導致實現不合規。所以這真的取決於你所問的算法。 – juanchopanza

+0

是的,我的意思是標準的。我認爲他們會和系列版本一樣,但是被這本書弄糊塗了 - 我想這只是一個更簡單的例子。非常感謝! – danielgharvey

回答

2

標準庫算法的行爲*std::find, std::find_if在C++標準中有詳細說明。從C++ 14開始,並行算法的指定行爲沒有例外。這意味着假設的並行實現仍需要遵守這些要求才能符合要求。


*從評論,OP意味着C++標準庫,而不是標準模板庫。我做了區分,因爲STL可能會定義一組不同的規則。

+0

掛上。針對輸入迭代器定義了C++標準中的find_if。大概平行版本需要更強大的東西,因此它不完全等效。在這種情況下,對我而言並不重要,但是讓我想知道在順序版本和並行版本之間是什麼和不保證是相同的。我想知道是否有任何完整的並行版本規格?我找不到它。 – danielgharvey

+0

@danielgharvey問題是目前的標準沒有平行版本。並行實現必須遵守指定的語義。 – juanchopanza