线程安全的三角测量库

888*_*888 5 c++ thread-safety triangulation

我正在编写一个需要快速Minkowski总和计算的C++软件.基于double的实现就足够了.

我评估了一些几何库,如

但我最终使用了另一个第三方库,与以前的库相比速度非常快,并且使用FIST库进行三角测量.

我的代码或多或少地以下列方式工作:

  • 我读了我的多边形
  • 我计算我需要的Minkowski总和
  • n次
    • 我决定在下面的计算中使用哪些多边形
    • 我根据Minkowski总和做了一些事情
    • 我给结果一个值
  • 我将结果以最佳值作为最终结果

由于循环内的计算独立于循环,我将循环并行化,一切正常.

然后我决定在每个并行回合中移动Minkowski和计算:

  • 我读了我的多边形
  • 对于number_of_threads(= n)次
    • 我决定在下面的计算中使用哪些多边形
    • 我计算了本轮所需的Minkowski总和
    • 我根据Minkowski总和做了一些事情
    • 我给结果一个值
  • 我将结果以最佳值作为最终结果

    但是第三方图书馆不再工作了.

我收到number_of_threads - 1错误消息说

断言失败.

导致断言失败的文件从运行变为运行以及从线程变为线程,但它们都是与FIST头同名的c文件(虽然我有第三方库的源代码,但我只有一个. lib和FIST库的头文件)

如前所述,我尝试在并行化代码之外计算我需要的所有Minkowski总和并使用其中的结果.这没关系.所以我几乎可以肯定问题来自FIST.

我有两个问题:

  • 你知道FIST库是否是线程安全的吗?

  • 如果没有,你能否建议我一个线程安全(C或更好)的C++三角测量库来取代FIST(可能具有相似的性能)?

编辑:

实际上,我不知道"线程安全"是否正是我想要的:我只需要一个能够同时计算许多独立三角测量的指令库.

我认为如果库没有全局变量,并且它有一个没有static变量的类

class triangulation
{
    // no static variables

    void execute_triangulation();
}
Run Code Online (Sandbox Code Playgroud)

这可能就足够了.所以我可以使用该类的不同实例并与它们的方法并行运行.

lri*_*eau 3

您可以使用CGAL 的 2D 三角测量包来替换 FIST,然后将其用作进行 Minskowski 求和的第三方库的输入。CGAL 三角测量非常快速且可靠。您可以使用约束 Delaunay 三角剖分对多边形和复杂形状进行三角剖分。

顺便问一下,你使用哪个 Minkowsky 库?