我使用各种#pragma omp 指令用C 编写了一个库来并行执行。我在 Mac OS X 10.6 上。然后,我将这些函数包装在一个 JNI 库中,并从我的 Java 应用程序中调用它们。
如果从主线程之外的 Java 线程调用它们,则似乎对包含 OpenMP 指令的本机函数的调用会因 EXC_BAD_ACCCESS 崩溃 - 换句话说,
public static void main(String[] args) { nativeCall(); }
有效,但在另一个线程上调用库,比如 EventQueue
public static void main(String[] args) {
SwingUtilities.invokeLater(
new Runnable(){
public void run() { nativeCall(); }
});}
EXC_BAD_ACCESS 崩溃。
我是 OpenMP 的新手,所以我不确定是什么原因造成的。java“主”线程有什么特别之处?它是否以某种特权模式运行,只有它才能访问初始化 OpenMP 并行化任务所需的资源?我也不太熟悉 OS X 上 JVM 的内部工作原理,所以我不确定 Java 线程和本机线程之间的关系是什么。
任何帮助表示赞赏!