我有一个并行拟合程序(与 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 是函数指针。它们都以相同的方式使用。
谢谢你。