Dav*_*óth 0 c++ multithreading stdcopy
我想尽快将一个向量复制到另一个向量中。
一种方法是使用std::copy:
std::copy(other_vector().begin(),other_vector().end(),this_vector.begin());
Run Code Online (Sandbox Code Playgroud)
但由于向量很长,我想知道该std::copy函数是否已实现,因此它会使用多个线程。
我可以提供一个自定义逻辑,用于将向量划分为相等的分离部分,以分别复制项目,但我不想再次重新发明轮子。
那么可以std::copy用于多线程吗?
你很幸运,你得到了 C++17
template< class ExecutionPolicy, class ForwardIt1, class ForwardIt2 >
ForwardIt2 copy( ExecutionPolicy&& policy, ForwardIt1 first, ForwardIt1 last, ForwardIt2 d_first );
Run Code Online (Sandbox Code Playgroud)
请参阅https://en.cppreference.com/w/cpp/algorithm/copy
不,std::copy您在问题中显示的重载通常不能实现并行执行,因为它被指定为按从第一个到最后一个的顺序顺序复制元素。在任何情况下可能都不会实现并行执行。
从 C++17 开始,标准库算法有了并行扩展,它需要一个额外的第一个参数来指定执行策略,它可以是并行的,假设标准库以这种方式实现它,例如(需要#include<execution>):
std::copy(std::execution::par, other_vector().begin(), other_vector().end(), this_vector.begin());
Run Code Online (Sandbox Code Playgroud)
有关执行策略的不同选项及其具体含义,请参阅cppreference.com 。
不过,这尚未在所有编译器/标准库中完全实现,并且可能需要额外的编译器选项。请参阅cppreference.com 的编译器支持表中的“并行性 TS 标准化” 。
| 归档时间: |
|
| 查看次数: |
1239 次 |
| 最近记录: |