Tôi đã đọc qua tài liệu std::algorithm tại cppreference.com và tôi nhận thấy một thẻ C++ 17 trên rất nhiều thứ tuyệt vời mà tôi chưa sử dụng. Điều tôi chú ý nhất là the new execution policies. Những gì tôi thu thập được từ việc đọc về chúng là tôi có thể thực hiện bất kỳ vòng lặp for_each
nào tôi muốn đa luồng chỉ bằng cách chỉ định chính sách thực thi.Làm cách nào để sử dụng chính sách thực thi C++ 17 mới?
Ví dụ: tôi có một chương trình xuất ra hình ảnh có đồ họa 2D trên đó.
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;
}
Nếu tôi muốn làm cho chương trình này đa luồng, tôi có thể làm điều đó với một dòng.
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;
}
Tuy nhiên khi lần đầu tiên tôi cố gắng này (với g++ -std=c++17
) Tôi đã nhận ra lỗi nói với tôi rằng ‘std::execution’ has not been declared
, vì vậy tôi cố gắng thêm #include <execution>
nhưng nó nói execution: No such file or directory
. Tôi cũng đã thử #include<experimental/algorithm>
thay vì #include<algorithm>
nhưng tôi nhận được kết quả tương tự. Làm cách nào để sử dụng tính năng mới này?
Xác minh rằng g của bạn ++ hỗ trợ tính năng này. C++ 17 thậm chí không chính thức được thực hiện, nhiều khả năng cho một vài tháng tốt. – chris
libstdC++ chưa hỗ trợ tính năng này, hãy xem trạng thái của P0024R2 là "không": https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#iso.2017.specific – Fanael