【发布时间】:2012-07-30 02:50:18
【问题描述】:
我不确定 MonitorEnter JNI 函数中的 obj 是什么。 obj 是作为本地函数中的参数传递还是要同步的共享变量? 我有一个名为缓冲区的变量,由两个线程共享。 这是我的代码。
JNIEXPORT void JNICALL Java_company_com_HelloActivity_setBuffer(JNIEnv *env, jobject obj, jstring jstr)
{
char buf[256];
int len = (*env)->GetStringLength(env, jstr);
(*env)->GetStringUTFRegion(env, jstr, 0, len, buf);
(*env)->MonitorEnter(env, obj); // I don't think this is correct.
strcat(buffer, buf); // buffer is declared as global char buffer[256];
(*env)->MonitorExit(env, obj);
}
编辑: 这个怎么样? syncobj 在 Activity 中定义为静态 Object 并与另一个线程共享。
JNIEXPORT void JNICALL Java_company_com_HelloActivity_setBuffer(JNIEnv *env, jobject obj, jstring jstr, jobject syncobj)
{
char buf[256];
int len = (*env)->GetStringLength(env, jstr);
(*env)->GetStringUTFRegion(env, jstr, 0, len, buf);
(*env)->MonitorEnter(env, syncobj);
strcat(buffer, buf);
(*env)->MonitorExit(env, syncobj);
}
【问题讨论】:
标签: java-native-interface synchronize