【问题标题】:Does `std::sort()` use threading to increase its performance?`std::sort()` 是否使用线程来提高其性能?
【发布时间】:2018-05-22 06:45:21
【问题描述】:

std::sort() 通常使用线程来提高其性能吗?我意识到这可能因实施而异。如果没有,为什么不呢?

【问题讨论】:

  • 很可能不是因为您可以对所有可用的线程进行排序。
  • 请注意,libstdc++ 和 libc++ 这两个最流行的实现是开源的。
  • 从 C++17 开始,您可以调用 std::sort(std::execution::par, ...) 使其并行运行。

标签: c++ multithreading sorting stl


【解决方案1】:

[res.on.data.races]/8 除非另有说明,否则 C++ 标准库函数应仅在当前线程内执行所有操作,前提是这些操作具有对 (4.7) 可见的效果用户。

/9 [ 注意:如果没有可见的副作用,这允许实现并行化操作。 ——尾注 ]

std::sort 原则上可以在对基本类型的元素进行排序时使用并行执行(是否这样做是不可观察的),但不是用户定义的类型(当然,除非通过执行策略参数明确授予权限)。该类型的operator< 可能不是线程安全的。

【讨论】:

  • 我在哪里可以找到有关“执行策略参数”的更多详细信息?
  • 引用来自哪里? The C++ standard我在哪里可以找到有关“执行策略参数”的更多详细信息? 在您最喜欢的 C++ 参考资料中,例如here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
  • 2016-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多