OpenMP v.2.0 or Boost thread 1.59

OpenMP v.2.0 or Boost thread 1.59

本文关键字:thread Boost or OpenMP      更新时间:2023-10-16

我想知道如何以安全的方式并行处理下面的for循环。我找到了这样一个可能的解决方案。然而,我仅限于使用OpenMP版本2.0和Boost版本1.59。

算法解释:

它遍历位于边界框内的所有三角形,然后在 _考虑三角形函数中检查交集(与唯一三角形)的可能性。最后,在 _contesttriangle 中,如果一个三角形是相交的,则将该三角形插入set容器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());

我想知道如何安全地并行它

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

// globals
boost::mutex mut;
// inside func
boost::mutex::scoped_lock lock(mut);
intersectedTri.insert(tri);