如何同步从 java 传递给 C++ 的 C++ 中的 java 对象?

How to synchronize on java object in c++ passed from java to c++?

正在将 java 对象传递给 cpp。我想在 cpp 中同步那个 java 对象。 (我也想在 java 端同步同一个对象,但这没问题,因为这可以通过同步块轻松实现)。

目标是:

cpp 将继续在 Arraylist 对象中附加一些数据(它从 java 接收) 同时 java 将继续使用(删除)java 代码中的数据。所以我想在 java 和 cpp 代码中同步操作。

在 cpp 中执行此操作的语法对我来说就足够了

您可以使用 Monitor Operations 的 JNI 函数:

jint MonitorEnter(JNIEnv *env, jobject obj);
jint MonitorExit(JNIEnv *env, jobject obj);

当然这是 C++ 所以你可能想把它放在 class (RAII):

class MonitorLock {
    JNIEnv *env;
    jobject obj;

public:
    MonitorLock(JNIEnv *in_env, jobject in_obj)
            : env(in_env), obj(in_obj) {
        if (env->MonitorEnter(obj)) {
            // there was an unusual problem,
            // you'll need to decide what to do with it
        }
    }

    ~MonitorLock() {
        if (env->MonitorExit(obj)) {
            // there was an unusual problem,
            // you'll need to decide what to do with it
        }
    }
};
{
    MonitorLock lock(env, obj);
    /*
     * synchronized
     *
     */
}

或者,你知道的,自己使用函数。 RAII 使代码更易读并保证 MonitorExit 总是被调用。