处理对dll功能的多重访问

时间:2014-06-05 23:43:30

标签: java c multithreading dll wrapper

在使用多个线程访问dll时遇到问题。 我使用自己编译的dll。我用java(JNA)调用多个java线程的dll函数。 我正在处理的操作是关于图像处理。 通过这种方法,我确实观察到一些小帧生成速度损失。 我想知道是不是因为线程访问了dll函数。

这是我正在使用的功能:

__declspec(dllexport) int iterate(double z_r,double z_i,double c_r,double c_i,double maxIteration){
double tmp;
int i=0;
while(z_r*z_r + z_i*z_i < 4 && i <maxIteration){
    tmp = z_r;
    z_r = z_r*z_r - z_i*z_i + c_r;
    z_i = 2*z_i*tmp + c_i;
    i++;
}
return i;
}

1 个答案:

答案 0 :(得分:1)

问题可能不是您从多个线程访问该函数,它应该是外部访问本身。我不知道您的价值有多大,例如maxIteration,但在我看来,此代码段运行时间不长,但经常

特别是在使用JNA时,调用此方法时可能会有一些严重的开销。所以你应该在返回Java之前尝试做更多的工作(再次调用外部方法......)。这样,您可能在C中具有的性能优势可以弥补开销。

然而,那说,不能肯定地说这个方法用C语言编写的速度比用Java编写的速度快。现在没有引用(我会试着找到一个),几周前我在一次演讲中听说Java在简单的算术运算方面应该是非常快的 - 这是你的方法唯一的做法。您还应该检查在编译C库时是否启用了编译器优化。

编辑:Wikipedia article表示Java具有类似于用C ++编写的此类程序的算术运算性能。因此,性能优势可能很小,我之前提到的开销可能最终决定。