【问题标题】:What do I have to consider when using std::sort with a parallel execution policy?将 std::sort 与并行执行策略一起使用时,我必须考虑什么?
【发布时间】:2021-05-11 13:58:40
【问题描述】:

使用 C++17,我们得到了执行策略。 我对parallel policies感兴趣

当我将std::sort 与并行策略一起使用时,我必须考虑什么? 与std::transformstd::for_each 不同,std::sort 同时访问两个元素。我必须在这里考虑数据竞争吗?

【问题讨论】:

  • 排序和任何有效的排序函数都不应该修改被排序的容器的值。所以std::sort 真的不需要自己做任何同步。话虽如此,如果您有其他线程可以在std::sort 运行时修改容器或其存储的值,那么这是另一回事,但这不是std::sort 可以防止的。您有责任防止此类情况发生。
  • @SomeProgrammerDude 这可能是语言障碍,但看到断言“sort [...] 应该 [not] 修改被排序容器的值”。好吧,它显然修改了它们,因为它交换了它们,这改变了正在交换的对象。虽然我相信我得到了你想要传达的内容:)

标签: c++ c++17


【解决方案1】:

在使用执行策略调用 std::sort 时,没有任何额外需要考虑。它已经是 UB 供您比较来改变它正在比较的元素。

需要实现以确保在std 中定义的任何函数中都没有数据竞争。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 2020-02-04
    • 2020-05-03
    • 1970-01-01
    • 2010-12-30
    • 2022-07-06
    • 1970-01-01
    相关资源
    最近更新 更多