我尝试使用openMP V.2.0编写并行for循环。在平行区域的中间,我构造了一个Object,我希望每个线程都构造一个Object。在OpenMP中每个线程执行一次代码而没有默认构造函数
#pragma omp parallel for
for (long i = 0; i < static_cast<long>(general_triangles.size()); ++i)
{
TrianglePointer tri = general_triangles[i];
if (tri.GetClassification() == TO_CLASSIFY)
{
bool tri_has_correct_normal = true;
// --- Construct tree once per thread ---
Tree tree(*(gp_boolean_operator->mp_group_manager));
if (tree.IsTriangleExternal(tri, tri_has_correct_normal))
{
tri.SetClassification(IS_EXTERNAL);
}
}
}
是否有每个线程构建一次树中的任意关键字?
您是否建议使用bood_thread_ptr?
为什么你会把'i'变成'long'而不是仅仅使用'std :: size_t'? – erip
@erip,因为openMP v.2.0不支持size_t –
非常明智的响应。 :) TIL - 看起来很傻,但唉。 – erip