【发布时间】:2021-05-11 13:58:40
【问题描述】:
使用 C++17,我们得到了执行策略。 我对parallel policies感兴趣
当我将std::sort 与并行策略一起使用时,我必须考虑什么?
与std::transform 或std::for_each 不同,std::sort 同时访问两个元素。我必须在这里考虑数据竞争吗?
【问题讨论】:
-
排序和任何有效的排序函数都不应该修改被排序的容器的值。所以
std::sort真的不需要自己做任何同步。话虽如此,如果您有其他线程可以在std::sort运行时修改容器或其存储的值,那么这是另一回事,但这不是std::sort可以防止的。您有责任防止此类情况发生。 -
@SomeProgrammerDude 这可能是语言障碍,但看到断言“sort [...] 应该 [not] 修改被排序容器的值”。好吧,它显然修改了它们,因为它交换了它们,这改变了正在交换的对象。虽然我相信我得到了你想要传达的内容:)