OpenMP v.2.0或Boost线程1.59

时间:2016-10-21 13:13:28

标签: c++ openmp boost-thread boost-mutex

我想知道如何以安全的方式并行化下面的循环。我找到了一些可能的解决方案,如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());

我很想知道如何安全地对它进行平安。

1 个答案:

答案 0 :(得分:0)

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

// globals
boost::mutex mut;

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