Ikh*_*laf 2 c++ java java-native-interface global-variables
我有一个从多线程java应用程序调用的JNI C++代码
这个C++代码有2个全局静态变量,一个布尔值和一个字符串.
出于某种原因,我不断从这段代码中获得分段错误.知道是什么导致了这个吗?我知道这不是线程安全的,但我将变量视为只读java应用程序,只有C++代码才能修改这些变量的值
非常感谢
编辑:此代码在Linux机器上运行.并且一次运行几个月没有任何问题,然后它发出信号11分段故障和JVM崩溃.
如果您从多个线程调用C++代码,并且C++代码具有全局静态变量,那么如果它有效则会很惊人.最简单的尝试是锁定调用,即在Java端更改
native int callToCppFunction(int parameter);
Run Code Online (Sandbox Code Playgroud)
至
synchronized native int callToCppFunction(int parameter);
Run Code Online (Sandbox Code Playgroud)
确保一次只有一个线程可以在C++代码中.
然后是另一个可能的问题,我在大约一年前碰到过:显然在Windows dll中,它可能不足以序列化对它的调用(即使用synchronized).它们也可能需要每次都从同一个线程调用.这个答案解释了它是如何做到的.解决方案是为Java端创建一个单线程执行程序,并通过它将所有调用路由到本机代码.
| 归档时间: |
|
| 查看次数: |
3578 次 |
| 最近记录: |