2016-10-21 6 views
0

私は安全な方法で以下のforループをどのように並列化できるのかと思います。 thisのような解決策がいくつか見つかりました。しかし、私はOpenMPバージョン2.0とBoostバージョン1.59を使うように制限されています。OpenMP v.2.0またはブーストスレッド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

コードに関する詳細情報を提供する必要があります。 'IntersectionTrianglesIterator :: operator ++'と 'GetTriangel')、反復中にどのような状態が変更されるか、' IntersectedTrianglesIterator'( 'IntersectionTrianglesIterator'と' GetTriangel')のどちらの状態であるかは完全には不明です。ランダムアクセス反復子、....謝辞は[mcve]を提供します。 – Zulan

+0

目の前に:OpenMP 2.0は** 14歳以上**です。あなたは真剣に新しいバージョンを入手できませんか? – Zulan

+0

私はVisual Studioを使用しています。さて、VS2015でも新しいバージョンのopenMPはサポートされません。 –

答えて

0

挿入をintersectedTriに同期させる限り、任意の方法を使用できます。

// globals 
boost::mutex mut; 

// inside func 
boost::mutex::scoped_lock lock(mut); 
intersectedTri.insert(tri); 
関連する問題