0

我想知道如何以安全的方式并行化下面的循环。我找到了像这样的一些可能的解决方案。但是我只能使用 OpenMP 2.0 版和 Boost 1.59 版。

算法解释:

它遍历边界框内的所有三角形,然后在_considerTriangle函数中检查相交的可能性(具有唯一三角形)。最后在_considerTriangle中,如果一个三角形相交,它会将三角形插入到一个集合容器intersectedTri中。

//Iterating through every triangle
std::set<Triangle> intersectedTri;
for(IntersectedTrianglesIterator it=tree.Begin_IteratorByBoundingBox(bbox_min,bbox_max);it!=tree.End_IteratorByBoundingBox(bbox_min,bbox_max);++it)
            _ConsiderTriangle(it->GetTriangle());

我想知道如何安全地将其平行化。

4

1 回答 1

0

您可以使用任何方法,只要您将插入同步到 intersectedTri。

// globals
boost::mutex mut;

// inside func
boost::mutex::scoped_lock lock(mut);
intersectedTri.insert(tri);
于 2016-10-21T14:38:45.827 回答