parallel-processing - 如何根据条件退出 std::execution::par_unseq 循环
问题描述
如果我的队列元素之一满足条件,我需要退出循环。放置 break 会导致编译错误。并行执行循环的最佳方法是什么
//代码
std::deque<element> my_elements;
std::for_each(std::execution::par_unseq, my_elements.begin(), my_elements.end(),
[&](auto v) {
if (v.attribute == something)
{
break;
}
});
解决方案
我很确定那行不通。为什么?因为break
是一个静态范围的操作;即,目标break
是在编译时确定的。将其放入 lambda 中(使用 lambda 外部的循环)使编译器无法查看“中断到”的位置。
没有并行性的示例:
vector<int> v {1,2,3,4,5,6,7,8,9};
std::for_each(v.begin(), v.end(),
[](int i) { cout << i << ' '; if (i == 5) break; });
cout << endl;
给我以下错误:
so.cpp:10:45: error: 'break' statement not in loop or switch statement
[](int i) { cout << i << ' '; if (i == 5) break; });
回答你的问题;for_each
我不认为有一个很好的方法可以在并行算法中脱颖而出。对于非并行情况,您可以抛出异常,但这在并行情况下不起作用。
推荐阅读
- c - 如何引导 gnu readline 远离标准输出
- vb.net - Visual Basic 中的公因数
- sql - 如何在查询中的多个左连接上创建多个连接
- php - 无法循环浏览自定义帖子类型
- typescript - 如何正确键入“调度程序”样式函数的“处理程序”查找
- list - 在haskell中结合字符串修改和连接
- python - Tesseract 无法读取数学表达式
- python - 从 Python 中的另一个数据框中查找主值
- ios - Android Studio 中的“导出到 zip 文件”导致 1.2gb + 存档大小
- python - 使用 cx_freeze 创建可执行文件的问题