gpt4 book ai didi

java - 如何以定义明确的线程安全方式将 C++ 字符串传递给 Java JNI?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:35 34 4
gpt4 key购买 nike

有一个C++函数,通过JNI从Java代码调用。
我想将底层的 c 字符串正确地传递给 Java,所以我做了以下安排:

// main.cpp
string global;

const char* data () // Called externally by JNI
{
return (global = func_returning_string()).data(); // `.data()` = `.c_str()`
}

但在这种情况下,函数data() 不再是线程安全的。
在传递字符串而不导致任何未定义行为的情况下实现线程安全的最佳方法是什么?

最佳答案

I want to pass the underlying c-string to the Java correctly

如何将 C++ 字符串传递给 Java?您不能将裸 C++ 指针传递给 Java,您应该为此使用 JNI 函数,即:

jstring jstr = (*env)->NewStringUTF(env, data());

然后将jstr传递给Java,或者以Java数组的形式传递。此函数复制字符串,因此不存在线程安全问题。

如果您想在 Java 和 C++ 之间共享内存区域,那么您可以尝试使用以下 JNI 函数:NewDirectByteBufferGetDirectBufferAddressGetDirectBufferCapacity

关于java - 如何以定义明确的线程安全方式将 C++ 字符串传递给 Java JNI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33752706/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com