0

我有一个并行拟合程序(与 OpenMP 并行),它采用函数指针必须拟合的函数。我一直面临问题,最终我发现我将相同的函数指针传递给进行拟合的类,这与其他类发生冲突并产生混乱的结果。

如何“复制”函数指针以使其成为线程安全的,或者换句话说,使线程不相互冲突?

我指向的函数也如下所示:

void function(const Real t, RealArray &a, Real &y)
{
#pragma omp critical //if I remove this line, the catastrophe happens and I get wrong results
    {
    if(t < FIDLength)
    {
        y = ...;
    }
}

并且每个线程中的类构造如下:

FitClass fit(DSxAxis1.size(),initialValues_param.size(),function,function2,constraints3D);

function 和 function2 是函数指针。它们都以相同的方式使用。

谢谢你。

4

1 回答 1

1

我使用了一个半函子并且它起作用了。所以我的拟合类现在有一个模板参数,其中包含函数、它的导数和其他东西。这工作正常。

结果:并非所有 std 函数都是线程安全的。

于 2012-06-13T15:34:12.860 回答