0

在处理我将其视为黑匣子的旧(但复杂)数值库时,我发现该库不是可重入的。因此,为了安全地从多个线程调用,我创建了由线程安全队列管理的库的多个副本。有关详细信息,请参阅以下问题:

基本上,我有一个库mvnpack.so,我已经复制了n时间,n通常是我机器上的处理器数量,到mvnpack.so.ifor ifrom 0to n-1。然后,这些中的每一个都映射到一个 JNA 接口中。副本本身与字节相同。

尽管我认为这会提高库的吞吐量并允许并行使用,但该库仍然表现出重入问题的症状,例如奇怪的数值结果、随机返回NaN的值等。我已将问题与所有其他问题,似乎答案可能是我不太了解的问题:

如果我将具有相同代码但文件名不同的多个相同共享库映射到同一进程的内存空间,是否存在它们仍将共享内存的情况?

我收到的对之前问题的回答表明这不会发生,但似乎确实发生了。如果是这种情况,是否可以使用任何编译器或链接器选项来阻止这些副本共享内存?我正在使用gfortran( gcc) 编译由 JNA 映射到 Java 进程的共享库。

4

0 回答 0