我想知道如何以安全的方式并行化下面的循环。我找到了一些可能的解决方案,如this。但是我只能使用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());
我很想知道如何安全地对它进行平安。
答案 0 :(得分:0)
您可以使用任何方法,只要您将插入同步到intersectedTri。
// globals
boost::mutex mut;
// inside func
boost::mutex::scoped_lock lock(mut);
intersectedTri.insert(tri);