繁体   English   中英

C ++代码中的JNI全局静态变量

[英]JNI Global Static Variables in C++ Code

我有一个从多线程Java应用程序调用的JNI C ++代码

此C ++代码具有2个全局静态变量:布尔值和字符串。

由于某种原因,我不断从此代码中获得分段错误。 知道会导致什么吗? 我知道这不是线程安全的,但是我将变量视为仅从Java应用程序读取,并且只有C ++代码才能修改这些变量的值

帮助非常感谢

编辑:此代码在Linux机器上运行。 并一次运行几个月,没有任何问题,然后发出信号11分段错误,并且JVM崩溃。

如果您要从多个线程调用C ++代码,并且C ++代码具有全局静态变量,那么如果它能正常工作,那就太好了。 最简单的尝试是在调用周围加一个锁,即在Java端更改

native int callToCppFunction(int parameter);

synchronized native int callToCppFunction(int parameter);

以确保一次只能在C ++代码中使用一个线程。

然后还有另一个可能的问题,我大约一年前碰到过:显然在Windows dll中,它可能不足以序列化对其的调用(即,使用synchronized )。 每次都可能需要从同一线程调用它们。 这个答案提供了一个解释。 解决方案是使单个线程执行程序到达Java端,并通过它将所有调用路由到本机代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM