【发布时间】:2017-07-22 22:06:38
【问题描述】:
我正在阅读cppreference.com 上的std::algorithm 文档,我注意到很多我还没有使用过的很酷的东西上有一个C++17 标签。最让我注意的是the new execution policies. 我从阅读它们中得到的信息是,我可以通过指定执行策略使任何我想要多线程的for_each 循环。
例如,我有一个程序可以输出带有 2D 图形的图像。
int main(){
std::for_each(
img.buffer().begin(),
img.buffer().end(),
renderer(
{-0.5, 0.0, 2.666, 2.0, M_PI / 2.0, 0.0},
img,
16
)
);
fout << img;
}
如果我想让这个程序多线程,我应该可以用一行来完成。
int main(){
std::for_each(
std::execution::par_unseq, // c++17 feature
img.buffer().begin(),
img.buffer().end(),
renderer(
{-0.5, 0.0, 2.666, 2.0, M_PI / 2.0, 0.0},
img,
16
)
);
fout << img;
}
但是,当我第一次尝试这个(使用g++ -std=c++17)时,我收到一个错误,告诉我‘std::execution’ has not been declared,所以我尝试添加#include <execution>,但它显示execution: No such file or directory。我也尝试过#include<experimental/algorithm> 而不是#include<algorithm>,但我得到了相同的结果。如何使用此新功能?
【问题讨论】:
-
验证您的 g++ 是否支持此功能。 C++17 甚至还没有正式完成,很可能还需要几个月的时间。
-
libstdc++还不支持这个功能,看P0024R2的状态是“no”:gcc.gnu.org/onlinedocs/libstdc++/manual/…
-
@underscore_d 重复关闭原因的帮助文本接近于“此问题已在...中得到解答”。 Q 不一定相同。您应该回答旧问题并然后将此问题作为重复项关闭。
-
(这是一个非特定的想法;我同意这是重复的)
标签: c++ multithreading algorithm c++17